Loading... ## CPU的虚拟化 CPU的虚拟化=机制+策略。 ### 机制 机制是一些低级方法或协议,实现所需的功能。例如时分共享技术。 > 注意,CPU或网络连接采用的是时分共享技术;而磁盘资源是空分共享。 ### 策略 策略是在操作系统内做出某种决定的算法。例如,操作系统应该提供一个调度策略去决定当前应执行哪一个进程。 ## 进程 ### 进程的概念 简单地说,进程就是运行中的程序。进程是操作系统为正在运行的程序提供的**抽象**。 ### 进程的组成 进程由地址空间(指令、数据)、寄存器(PC、栈指针、帧指针等)和持久存储设备组成。 ### 进程的创建 进程的创建可以分为4个步骤: 1. 将代码和静态数据加载到内存(现代操作系统惰性执行该过程) 2. 创建和初始化栈(分配后,将参数填入`main()`函数) 3. 分配堆空间(操作系统会根据需要,逐渐分配更多内存) 4. 执行与I/O设置相关的其他工作(例如UNIX下,打开默认的3个文件描述符) ### 进程的状态 简单来说,进程可以处于以下3个状态之一: * 运行(running):在运行状态下,进程正在处理器上运行。这意味着它正在执行 指令。 * 就绪(ready):在就绪状态下,进程已准备好运行,但由于某种原因,操作系统 选择不在此时运行。 * 阻塞(blocked):在阻塞状态下,一个进程执行了某种操作,直到发生其他事件 时才会准备运行。一个常见的例子是,当进程向磁盘发起I/O 请求时,它会被阻塞, 因此其他进程可以使用处理器。 ![](http://cdn.lxalxy.com/OS4-1.png) ### 进程的数据结构 操作系统会为所有就绪的进程保留某种进程列表,以存储所需的必要的进程信息。除了地址空间信息、状态信息、pid、I/O信息以外,对于停止的进程,操作系统还需要把寄存器的信息保存下来,以便在恢复运行进程时恢复上下文。下列代码是xv6内核的进程信息类型: ```cpp // the registers xv6 will save and restore // to stop and subsequently restart a process struct context { int eip; int esp; int ebx; int ecx; int edx; int esi; int edi; int ebp; }; // the different states a process can be in enum proc_state { UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE }; // the information xv6 tracks about each process // including its register context and state struct proc { char *mem; // Start of process memory uint sz; // Size of process memory char *kstack; // Bottom of kernel stack for this process enum proc_state state; // Process state int pid; // Process ID struct proc *parent; // Parent process void *chan; // If non-zero, sleeping on chan int killed; // If non-zero, have been killed struct file *ofile[NOFILE]; // Open files struct inode *cwd; // Current directory struct context context; // Switch here to run process struct trapframe *tf; // Trap frame for the current interrupt }; ``` © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏