第一章 操作系统概述
1. 什么是操作系统?
用户想让软件运行在计算机硬件上,必须要借助操作系统。
- 一种最接近硬件的一层软件,最底层的软件。
- 是系统资源的管理者,负责管理协调硬件,软件等资源的工作
- 为上层用户或者应用程序提供简单易用的服务
- 为其他软件提供服务,操作系统与软件进行交互,以便为其分配运行所需的任何必要资源。
2. 操作系统的主要功能
- 进程管理:进程同步、进程通信、进程死锁等等。
- 内存管理:内存分配、虚拟内存、地址映射等等。
- 文件管理:存储空间管理,文件读写管理和保护等等。
- 设备管理:设备分配、虚拟设备等等。
操作系统将计算机分为了两种状态:用户态和内核态。
内核态封装了一些底层的代码,避免了一些软件会恶意的损害操作系统,如果进程在用户态运行的时候需要使用内核态的功能,就需要进行系统调用陷入内核状态,由操作系统代为完成。
3. 为什么要区分用户态和内核态?
- 安全性:防止用户程序恶意或者不小心破坏系统/内存/硬件资源;
- 封装性:用户程序不需要实现更加底层的代码;
- 利于调度:如果多个用户程序都在等待键盘输入,这时就需要进行调度;统一交给操作系统调度更加方便。
用户态运行的进程或可以直接读取用户程序的数据
内核态运行的进程几乎可以访问计算机的任何资源
4. 什么是系统调用?和库函数的区别是啥
-
平常使用的软件都是运行在用户态,如果这些软件需要执行操作系统提供的内核态的功能(比如说文件、进程、内存管理等等)都必须通过系统调用方式向操作系统代为完成。这个过程涉及到用户态和内核态的切换,开销比较大。
-
库函数:是将一些常用的函数编写完放到一个文件里,这样用户编写应用程序时调用,一般由第三方提供,发生在用户地址空间。比如说Java中的类库。
常见的系统调用:
- 设备管理。完成设备的请求或释放,以及设备启动等功能。
- 文件管理。完成文件的读、写、创建及删除等功能。
- 进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。
- 进程通信。完成进程之间的消息传递或信号传递等功能。
- 内存管理。完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。
Linux 的系统调用主要有以下这些:
| Task | Commands |
|---|---|
| 进程控制 | fork(); exit(); wait(); |
| 进程通信 | pipe(); shmget(); mmap(); |
| 文件操作 | open(); read(); write(); |
| 设备操作 | ioctl(); read(); write(); |
| 信息维护 | getpid(); alarm(); sleep(); |
| 安全 | chmod(); umask(); chown(); |
5. 计算机是如何完成用户态和内核态的切换?
中断是CPU从用户态切换到内核态的唯一途径,发生中断的本质就是需要操作系统介入进行管理工作,使操作系统获得计算机的控制权,有了中断,才能实现多道程序并发执行。
当中断发生时:
- 当中断发生时,CPU立即进入核心态
- 当中断发生后,当前运行的进程暂停进行,由操作系统内核对中断进行处理
- 对于不同的中断信号,会进行不同的处理。
中断也分为不同的种类:
- 外中断:
- 内中断:信号的来源是CPU内部
6. 并发和并行的区别?
并发是指宏观上在一段时间内能同时运行多个程序,而并行则指同一时刻能运行多个指令。
并行需要硬件支持,如多流水线、多核处理器或者分布式计算系统。
操作系统通过引入进程和线程,使得程序能够并发运行。
7. 异步和同步的区别?
同步,是所有的操作都做完,才返回给用户结果。
异步,不用等所有操作都做完,就相应用户请求。
8. 什么是虚拟技术?
虚拟技术把一个物理实体转换为多个逻辑实体。
主要有两种虚拟技术:时(时间)分复用技术和空(空间)分复用技术。
多个进程能在同一个处理器上并发执行使用了时分复用技术,让每个进程轮流占用处理器,每次只执行一小个时间片并快速切换。
虚拟内存使用了空分复用技术,它将物理内存抽象为地址空间,每个进程都有各自的地址空间。地址空间的页被映射到物理内存,地址空间的页并不需要全部在物理内存中,当使用到一个没有在物理内存的页时,执行页面置换算法,将该页置换到内存中。
虚拟内存技术本质上就是内存分时复用,可以使程序在远小于它的内存空间运行。