CPU虚拟化重点知识(1)-操作系统导论第四章
# CPU虚拟化重点知识
## 一、抽象:进程
进程的非正式定义:进程就是运行中的程序。程序本身是没有生命周期的,它知识存在在磁盘上面的一些指令。是操作系统让这些字节运行起来,让程序发挥作用。
> 关键问题:如何提供有许多CPU的假象?
> 虽然只有少量的物理CPU可用,但是操作系统如何提供几乎有无数个CPU可用的假象?
操作系统通过虚拟化CPU(virtualizing)提供这种假象。通过让一个进程只运行一个时间片,然后切换到其他进程,操作系统提供了存在多个虚拟CPU的假象。这就是时分共享CPU技术,允许用户如愿运行多个并发进程。
要实现CPU虚拟化,操作系统需要一些机制和策略。
## 二、抽象:进程概念
进程的机器状态:程序在运行时可以读取或更新内容。
- 进程的机器状态有一个明显组成部分,内存。进程可以访问的内存是该进程的一部分。
- 进程的机器状态另一部分是寄存器。许多指令明确的读取或更新寄存器。
- 进程经常访问持久存储设备。此类I/O信息可能包含当前打开的文件列表。
## 三、进程API
- 创建(create):操作系统必须包含一些创建新进程的方法。
- 销毁(destroy):操作系统提供一个强制销毁进程的接口。
- 等待(wait):等待其他进程运行结束
- 其他控制(miscellaneous control)
- 状态(statu):查看进程当前状态。
## 四、进程创建:更多细节
操作系统运行程序的步骤:
1. 将代码和所有静态数据(初始化变量)加载(load)到内存中。
> 在早期操作系统中,加载过程尽早完成,即在运行程序之前全部完成。现代操作系统采用懒加载执行,即仅在程序执行期间需要加载的代码或数据片段才会加载。
2. 为程序的运行时栈(run-timestack)分配一些内存。C程序使用栈存放局部变量、函数参数或返回地址。
3. 操作系统为程序的堆分配一些内存。C程序使用堆来显示请求动态分配数据。
4. 其他初始化任务如I/O任务。
## 五、进程状态
- 运行(running):在运行状态下,进程正在处理器上运行。
- 就绪(ready):在就绪状态下,进程以准备好运行,但由于某种原因,操作系统选择不在此时运行。
- 阻塞(blocked):在阻塞状态下,一个进程执行了某种操作,指导发生其他事件时才会准备运行。

## 六、数据结构
- 操作系统为就绪的进程保留某种进程列表(process list),跟踪当前重在运行的进程的一些附加信息。
- 跟踪当前正在运行的进程的一些附加信息。
- 跟踪被阻塞的进程。
- 确保唤醒正确的进程。
操作系统的状态
`UNUSED,EMBRYO,SLEEPING,RUNNABLE,RUNNING,ZOMBIE`
> ZOMBIE:僵尸状态,允许其他进程检查该进程的返回代码,查看该进程是否成功执行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现