Process

进程是由 内存中地址空间的内容、CPU寄存器中的内容(PC、栈指针等)和I/O信息(打开的文件)等组成
Machine state有三种:running ready blocked
OSTEP学习笔记-Virtualization
OS中的数据结构:Process List

Process API

Direct Execution

为了虚拟化CPU,想到的解决方法首先是通过time sharing,即每个进程运行一段时间。
出现的两个难题:

  1. 性能:如何在不增加系统过多的开销的情况下实现虚拟化
  2. 控制:如何在高效运行进程的同时保有对CPU的控制

Limited Direct Execution

Direct Execution的意思就是让进程的指令直接在CPU上运行,这样的解决方案是最简单的,但是这样会出现的问题是:OS无法得知程序是否做了某些我们不想让他做的(因为拥有所有权限)、如何进行time sharing。

Problem 1: 限制操作

尽管直接在CPU上运行很快,但是由于进程拥有所有权限,导致它们可能会做一些我们不想进程做的事(如随意访问计算机资源),所以一种办法就是限制操作。所以解决方案就是使用两种模式:kernel mode & user mode 。
一般的指令都在user mode下执行,当需要system call时,进程会通过trap指令陷入kernel mode。 在这个过程中,硬件需要确保保存所有的 caller‘s register(调用者寄存器)。(在x86中,会将这些都压入kernel stack中)
OS在boot阶段将安装好trap table,所以当发生trap时,通过system-call number就能正确跳转到system-call。
OSTEP学习笔记-Virtualization
LDE protocol有两个阶段

  1. boot阶段,内核初始化trap table,这时CPU会记住他们的位置为了后面的使用
  2. running阶段,当一个进程运行时,内核会在调用return-from-trap之前设置一些东西(分配在process list上的节点,分配内存)以便可以使进程开始运行。
    你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

Problem 2: 进程间切换

第二个问题是进程间如何切换,我最开始也觉得这是个很简单的事,毕竟有os调度,但书中提到了,OS也是个软件,本身也是需要time sharing的(不禁让我感觉开始套娃)。所以是怎么解决的呢?
在早期,一些developer的方法是cooperative approach,这种方法是当进程调用system call时,将控制权返还给os,但是其中的问题是,假如某个恶意程序(或bug)写了一个无限循环,并且在其中不写入system call,那这个程序将永远抢占CPU资源,导致死机,只能reboot了。
另一种方法就是Non-Cooperative approach。简单来说就是使用
TIMER,每次timer到时了,就会发出interrupt(中断发生时,系统会屏蔽timer的signal),将control返回给OS。得到控制后的问题就是保存和恢复上下文(也就是上下文切换,context switch)。当需要进行上下文切换时,OS会调用switch routine,os会保存好正在运行的这个进程的process information,然后恢复将要运行的这个进程的process information。在context switch中,会发生两次save&restore,第一次是当timer中断发生时,硬件会隐式的保存正在运行的进程的user registers。第二次是当OS决定进行上下文切换时,kernel registers会被显式的由软件(也就是OS)保存在该进程的进程结构中。如下图
OSTEP学习笔记-Virtualization

TBD…

资料
[1]: http://pages.cs.wisc.edu/~remzi/OSTEP/

相关文章:

  • 2021-09-23
  • 2022-01-02
  • 2022-12-23
  • 2022-12-23
  • 2021-12-24
  • 2022-12-23
  • 2021-08-08
  • 2021-09-24
猜你喜欢
  • 2022-01-02
  • 2021-10-22
  • 2021-05-31
  • 2021-06-27
  • 2021-05-20
  • 2022-01-25
  • 2021-12-22
相关资源
相似解决方案