操作系统
操作系统主要有哪些功能?
文件管理、进程管理、内存管理、设备管理、安全管理
什么是内核态和用户态?
- 内核态:也称为特权模式,是操作系统执行内核代码模式,具有最高的权限级别
- 用户态:是应用程序所在的模式。具有较低的权限级别
用户态和内核态是如何切换的?
- 用户态和内核态的切换是由系统调用实现的
- 当程序需要访问内核态的资源的时候,就会触发中断
中断处理程序会将程序的栈、寄存器保存起来,然后跳转到内核态执行
最后将保存的信息恢复,使程序回到用户态继续执行
进程上下文切换 线程上下文切换 中断上下文切换?
- 进程上下文切换是指不同进程之间进行切换,进程调度器会将当前进程的上下文信息保存下来,然后加载被调度进程的上下文信息
- 线程上下文切换分为两种情况
- 两个线程属于一个进程,因为资源共享,所以只需要切换线程的私有数据
- 如果两个线程不属于一个进程,切换过程和进程上下文切换相同
- 所以,同进程的线程切换消耗更少的资源
- 中断上下文切换:指进程切换到中断程序,只保存内核态资源,不保存用户态资源
进程有哪些状态?
进程有新建状态、就绪状态、执行状态、阻塞状态和结束状态
- 新建状态:进程初始创建的状态
- 就绪状态:进程已经准备好执行,等待系统分配 CPU
- 执行状态:进程已经被分配 CPU 并且在开始执行
- 阻塞状态:进程暂停执行,正在等待某一事件,例如等待 IO 操作完成
- 结束状态:进程完成了执行或者被终止,系统将回收进程占用的资源并结束该进程
什么是僵尸进程?
- 僵尸进程是指子进程处于结束状态,但是子进程的进程描述符没有释放
可以通过在父进程调用 wait() 方法解决
什么是孤儿进程?
- 孤儿进程是指父进程退出,子进程还在运行,这些子进程就成为孤儿进程
- 孤儿进程会被 init 进程接管
进程有哪些调度算法?
常见的进程调度算法有先来先服务、短作业优先、优先级调度、时间片轮转和最短剩余时间优先
- 先来先服务:按照请求的顺序进行调度,有利于长作业,不利于短作业
- 短作业优先:按照估计运行时间最短的顺序进行调度,不利于长作业,长作业可能会处于一直等待短作业执行完毕的状态
- 优先级调度:按照优先级进行调度,为了防止低优先级的进程永远等不到调度,可以随着时间的推移增加等待进程的优先级
- 时间片轮转:按照时间片执行,将进程按照先来先服务的原则调度,队首进程执行完时间片长的时间后,停止执行,将该进程送到队尾,继续执行下一个进程
- 最短剩余时间优先:按照剩余运行时间顺序进行调度。如果新的进程运行时间更短,则将当前进程挂起,运行新的进程
进程间通信有哪些方式?
进程间通信方式有:管道、命名管道、共享内存、信号量、消息队列和 Socket
- 管道:单向通信方式,多用于父子进程或者兄弟进程间的通信
- 命名管道:全双工通信,两个进程可以通过同一个管道来读写数据
- 共享内存:多个进程访问同一块共享内存区域,用于高效数据传输
- 信号量:用于协调多个进程对共享资源的访问顺序,实现进程间的同步,本质上是个计数器
- 消息队列:能够存储和转发进程间的数据,同一时间可以有多个进程获取该队列中的数据
- Socket:用于网络中不同主机进程间的通信
线程有哪些实现方式?
线程的实现方式有内核态线程实现、用户态线程实现和混合线程实现
- 内核态线程实现:内核直接管理线程
- 用户态线程实现:用户态管理线程
- 混合线程实现:通用方式
什么是虚拟内存?什么是交换空间?
- 虚拟内存是操作系统提供的一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来
- 交换空间:在内存资源不足的时候,将某些页的内容转移到磁盘上,以释放内存空间,磁盘上的那块空间叫做交换空间
什么是内存分段?什么是内存分页?多级页表?块表?
- 内存分段:将内存分成若干个大小不同的段,每个段用于存储数据或者执行程序
- 内存分页:将内存分为若个人大小相同的页,每个页为连续的物理地址空间
- 多级页表:在单级的页表上再次分页,形成多级结构的页表,并且只有在需要时才创建页表。
- 块表:也成页表缓存,用来存放程序最常访问的页表项
页面置换算法有哪些?
常用的页面置换算法有最佳页面置换算法、先进先出置换算法、最久未使用置换算法、时钟页面置换算法和最不常用置换算法
- 最佳页面置换算法 OPT:置换在未来最长时间不访问的页面
- 先进先出置换算法 FIFO:置换在内存停留时间很长的页面
- 最久最少使用置换算法 LRU:置换最长时间没有被访问的页面
- 时钟页面置换算法 Lock:置换页面环形链表中访问位为 0 的页面
- 最不常用置换算法 LFU:置换访问次数最少的页面
硬链接和软链接有什么区别?
-
硬链接:多个文件名指向同一数据块,即目录不同,但 inode 值相同
可以通过不同的文件名访问同一个文件的内容
可以通过任意一个文件名对文件进行更改删除,但是硬链接不能跨越文件系统 -
软链接:相当于重新创建一个文件,新文件有独立的 inode,文件的内容是另个文件的路径,类似于快捷方式
软链接可以跨越文件系统
零拷贝了解吗?
零拷贝是一种 IO 操作优化技术,将数据从文件系统移动到网络接口,减少用户态和内核态的上下文切换和内存拷贝次数
零拷贝通常使用以下两种技术实现:
-
mmap+write: 利用虚拟内存,将内核缓冲区的数据映射到用户空间,从而减少一次内存拷贝
-
sendfile:sendfile 操作在内核中直接将内存缓冲区拷贝到 Socket 缓冲区,从而减少一次上下文切换和一次内存拷贝
聊聊阻塞与非阻塞的 I/O?
- 阻塞 I/O:进程在进行读写操作的时候,必须等待 IO 操作完成才能进行下一步操作
- 非阻塞 I/O:允许进程在等待 IO 操作的同时,继续执行,同时不断轮询内核
- 基于非阻塞的 I/O 多路复用:为了避免应用程序一直轮询,当内核数据准备好时,通知应用程序
- 异步 I/O:进程进行读写操作时,立即返回,内核将数据主动拷贝到应用程序空间
讲讲 I/O 多路复用?
- I/O 多路复用:一个或者多个线程处理多个 TCP 连接,从而减少系统开销
- I/O 多路复用的实现方式包括 select,poll,epoll
- select:基于轮询的方式和遍历的方法实现的
- poll:与 select 实现方式类似,都是基于轮询的方式实现的,但使用链表解决了文件描述符数量的上限问题
- Epoll:是基于事件驱动的,不需要进行轮询,同时在内核中使用红黑树来记录文件描述符,具备更高的性能
用户进程需要 8GB 的内存空间,操作系统实际分配多少?
- 这个 8G 的内存是虚拟地址空间,
- 操作系统不会立即分配所有的虚拟地址空间,而是根据需要进行动态分配
- 当用户进程访问尚未加载到物理内存的部分时,操作系统会将相应的页面加载到物理内存