《操作系统导论》之虚拟化CPU学习笔记:进程

今天我们开始学习《操作系统导论》的第一个主题:虚拟化CPU。

虚拟化CPU的目的是为了将少量物理CPU,让用户看起来像是有无数多个CPU可用,以便能让多个进程可以同时运行。

操作系统要实现虚拟化CPU,要从三个方面要实现:抽象出"进程"的概念底层(硬件)机制支持 以及高层策略(OS对进程的调度算法)

进程是底层机制和高层策略实现的基础。所以,我们先来了解下进程相关的知识。

什么是进程

操作系统中,将运行中的应用程序叫做进程

我们在电脑桌面上或手机桌面上看到的应用列表,就是应用程序。应用程序被存储在磁盘上。如下:

将应用程序运行起来就叫做进程。比如,我们在macbook的活动监视器中看到的列表,就是正在运行中的应用程序,也就是对应应用程序的进程。通过这个列表,我们就可以看到每个进程使用的内存和CPU的占用量。如下:

操作系统为什么要抽象出"进程"这么一个概念呢?因为操作系统在分配系统资源时是以进程为基本单位的,每个分配到的系统资源(比如内存、CPU)都是独立的 ,进程与进程间的资源是不能共享的;同时进程和进程之间也就具有了隔离性

操作系统在调度时的基本单位也是进程。 所以,进程是操作系统中调度策略实现的基础。

启动一个进程需要的硬件资源

因为计算机的硬件就是要用来运行软件的。所以操作系统要创建一个进程,就必须要给该进程分配一定的硬件资源。一般一个进程所需要的硬件资源至少有内存寄存器持久设备

如何创建一个进程

我们看下操作系统是如何将一个应用程序转换成进程的。

  • 首先,用户触发应用程序,双击图标或在shell里启动一个程序。
  • 其次,操作系统将应用程序的代码和静态数据从磁盘加载到内存中。
  • 然后,操作系统为程序的运行分配栈内存、堆内存。
  • 接着,操作系统还需要执行一些和I/O相关的任务。比如在unix系统中每个进程都有3个打开的文件描述符,用于标准输入、输出和错误。
  • 最后,执行应用程序的入口函数,一般为main函数。从而开始执行应用程序。

进程相关的API

用户或应用程序如何告知操作系统来创建进程以及管理进程呢?那就是通过操作系统提供的和进程相关的一组API,即相关的函数接口。

操作系统一般会提供如下相关API:

  • 创建进程的API(create):比如双击应用程序的图标时,就会调用操作系统来创建并运行进程。
    • 销毁进程的API(destroy):和创建进程相对应,有时候会强制终止进程的运行,并释放进程所拥有的资源。
  • 等待其他进程的API(wait):比如父进程要等待子进程完成。
  • 获取进程状态的API(status):例如获取进程已运行的时长或处于什么状态等。
  • 其他一些控制进程的API:比如杀死进程、暂停进程以及恢复进程等。

进程的状态

进程在给定的时间内可能处于不同的状态。一般有3个主要的状态:

  • 运行:该状态下,进程正在处理器上运行
  • 就绪:该状态下,说明进程已准备好运行,但还没有运行。
  • 阻塞:该状态下,说明进程执行了某种操作一直在等待,直到发生其他事件才准备运行。比如向磁盘发出了I/O操作,进程被阻塞。这时其他进程就可以使用CPU了。

3个状态的转换关系如下:

数据结构

大家可能都听说过数据结构+逻辑=软件。数据结构是用来存储各种信息的,逻辑就是告诉CPU如何执行的指令。 操作系统也不例外,也需要用数据结构来存储进程相关的信息。比如每个进程所需的各种寄存器的信息、状态信息以及不同状态的进程列表结构等。

总结

操作系统抽象出了"进程"的概念,这就为后续操作系统做进程调度提供了基础。

下一篇,我们继续学习虚拟化CPU的底层机制。

欢迎关注 Go学堂 ,学习更多计算机基础和编程知识

相关推荐
kaixin_learn_qt_ing11 分钟前
Golang
开发语言·后端·golang
炒空心菜菜1 小时前
MapReduce 实现 WordCount
java·开发语言·ide·后端·spark·eclipse·mapreduce
wowocpp3 小时前
spring boot Controller 和 RestController 的区别
java·spring boot·后端
后青春期的诗go3 小时前
基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(二)
开发语言·后端·rust·rocket框架
freellf3 小时前
go语言学习进阶
后端·学习·golang
全栈派森6 小时前
云存储最佳实践
后端·python·程序人生·flask
CircleMouse6 小时前
基于 RedisTemplate 的分页缓存设计
java·开发语言·后端·spring·缓存
獨枭7 小时前
使用 163 邮箱实现 Spring Boot 邮箱验证码登录
java·spring boot·后端
维基框架7 小时前
Spring Boot 封装 MinIO 工具
java·spring boot·后端
秋野酱7 小时前
基于javaweb的SpringBoot酒店管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端