操作系统

作者: Cathy 分类: 编程开发 发布时间: 2023-05-03 13:55

操作系统主要有哪些功能?

文件管理、进程管理、内存管理、设备管理、安全管理

什么是内核态和用户态?

  • 内核态:也称为特权模式,是操作系统执行内核代码模式,具有最高的权限级别
  • 用户态:是应用程序所在的模式。具有较低的权限级别

用户态和内核态是如何切换的?

  • 用户态和内核态的切换是由系统调用实现的
  • 当程序需要访问内核态的资源的时候,就会触发中断
    中断处理程序会将程序的栈、寄存器保存起来,然后跳转到内核态执行
    最后将保存的信息恢复,使程序回到用户态继续执行

进程上下文切换 线程上下文切换 中断上下文切换?

  • 进程上下文切换是指不同进程之间进行切换,进程调度器会将当前进程的上下文信息保存下来,然后加载被调度进程的上下文信息
  • 线程上下文切换分为两种情况
    • 两个线程属于一个进程,因为资源共享,所以只需要切换线程的私有数据
    • 如果两个线程不属于一个进程,切换过程和进程上下文切换相同
    • 所以,同进程的线程切换消耗更少的资源
  • 中断上下文切换:指进程切换到中断程序,只保存内核态资源,不保存用户态资源

进程有哪些状态?

进程有新建状态、就绪状态、执行状态、阻塞状态和结束状态

  • 新建状态:进程初始创建的状态
  • 就绪状态:进程已经准备好执行,等待系统分配 CPU
  • 执行状态:进程已经被分配 CPU 并且在开始执行
  • 阻塞状态:进程暂停执行,正在等待某一事件,例如等待 IO 操作完成
  • 结束状态:进程完成了执行或者被终止,系统将回收进程占用的资源并结束该进程

什么是僵尸进程?

  • 僵尸进程是指子进程处于结束状态,但是子进程的进程描述符没有释放
    可以通过在父进程调用 wait() 方法解决

什么是孤儿进程?

  • 孤儿进程是指父进程退出,子进程还在运行,这些子进程就成为孤儿进程
  • 孤儿进程会被 init 进程接管

进程有哪些调度算法?

常见的进程调度算法有先来先服务、短作业优先、优先级调度、时间片轮转和最短剩余时间优先

  • 先来先服务:按照请求的顺序进行调度,有利于长作业,不利于短作业
  • 短作业优先:按照估计运行时间最短的顺序进行调度,不利于长作业,长作业可能会处于一直等待短作业执行完毕的状态
  • 优先级调度:按照优先级进行调度,为了防止低优先级的进程永远等不到调度,可以随着时间的推移增加等待进程的优先级
  • 时间片轮转:按照时间片执行,将进程按照先来先服务的原则调度,队首进程执行完时间片长的时间后,停止执行,将该进程送到队尾,继续执行下一个进程
  • 最短剩余时间优先:按照剩余运行时间顺序进行调度。如果新的进程运行时间更短,则将当前进程挂起,运行新的进程

进程间通信有哪些方式?

进程间通信方式有:管道、命名管道、共享内存、信号量、消息队列和 Socket

  • 管道:单向通信方式,多用于父子进程或者兄弟进程间的通信
  • 命名管道:全双工通信,两个进程可以通过同一个管道来读写数据
  • 共享内存:多个进程访问同一块共享内存区域,用于高效数据传输
  • 信号量:用于协调多个进程对共享资源的访问顺序,实现进程间的同步,本质上是个计数器
  • 消息队列:能够存储和转发进程间的数据,同一时间可以有多个进程获取该队列中的数据
  • Socket:用于网络中不同主机进程间的通信

线程有哪些实现方式?

线程的实现方式有内核态线程实现、用户态线程实现和混合线程实现

  • 内核态线程实现:内核直接管理线程
  • 用户态线程实现:用户态管理线程
  • 混合线程实现:通用方式

什么是虚拟内存?什么是交换空间?

  • 虚拟内存是操作系统提供的一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来
  • 交换空间:在内存资源不足的时候,将某些页的内容转移到磁盘上,以释放内存空间,磁盘上的那块空间叫做交换空间

什么是内存分段?什么是内存分页?多级页表?块表?

  • 内存分段:将内存分成若干个大小不同的段,每个段用于存储数据或者执行程序
  • 内存分页:将内存分为若个人大小相同的页,每个页为连续的物理地址空间
  • 多级页表:在单级的页表上再次分页,形成多级结构的页表,并且只有在需要时才创建页表。
  • 块表:也成页表缓存,用来存放程序最常访问的页表项

页面置换算法有哪些?

常用的页面置换算法有最佳页面置换算法、先进先出置换算法、最久未使用置换算法、时钟页面置换算法和最不常用置换算法

  • 最佳页面置换算法 OPT:置换在未来最长时间不访问的页面
  • 先进先出置换算法 FIFO:置换在内存停留时间很长的页面
  • 最久最少使用置换算法 LRU:置换最长时间没有被访问的页面
  • 时钟页面置换算法 Lock:置换页面环形链表中访问位为 0 的页面
  • 最不常用置换算法 LFU:置换访问次数最少的页面

硬链接和软链接有什么区别?

  • 硬链接:多个文件名指向同一数据块,即目录不同,但 inode 值相同
    可以通过不同的文件名访问同一个文件的内容
    可以通过任意一个文件名对文件进行更改删除,但是硬链接不能跨越文件系统

    image-20230330092429139

  • 软链接:相当于重新创建一个文件,新文件有独立的 inode,文件的内容是另个文件的路径,类似于快捷方式
    软链接可以跨越文件系统
    image-20230330092650662

零拷贝了解吗?

零拷贝是一种 IO 操作优化技术,将数据从文件系统移动到网络接口,减少用户态和内核态的上下文切换和内存拷贝次数

image-20230401090842567

零拷贝通常使用以下两种技术实现:

  • mmap+write: 利用虚拟内存,将内核缓冲区的数据映射到用户空间,从而减少一次内存拷贝

    image-20230401091249451

  • sendfile:sendfile 操作在内核中直接将内存缓冲区拷贝到 Socket 缓冲区,从而减少一次上下文切换和一次内存拷贝

    image-20230401091452722

聊聊阻塞与非阻塞的 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 的内存是虚拟地址空间,
  • 操作系统不会立即分配所有的虚拟地址空间,而是根据需要进行动态分配
  • 当用户进程访问尚未加载到物理内存的部分时,操作系统会将相应的页面加载到物理内存

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注