OS | 4 抽象:进程

OS | 4 抽象:进程

CPU虚拟化的方法

操作系统通过虚拟化(virtualizing)CPU来提供这种现象:通过让1个进程只运行1个时间片,然后切换到其他进程,操作系统系统了存在多个CPU的假象。

实现CPU虚拟化,现代操作系统都采用时分共享机制

时分共享(time sharing):通过允许资源由一个实体使用一小段时间,然后由另一个实体使用一小段时间,如此下去,资源(CPU或网络连接)可以被许多人共享。

时分共享对应技术是空分共享

空分共享:资源在空间上被划分给希望使用它的人。例如磁盘空间就是一个空分共享资源。

进程:是一种抽象

非正式定义

进程就是运行中的程序。

程序本身没有生命周期的,它只是存在磁盘上的一些指令(也可能是一些静态数据)。

是操作系统让这些字节运行起来,让程序发挥作用

所以“字节跳动”就是一个进程?!

操作系统为正在运行的程序提供的抽象,就是所谓的进程(progress)。

在任何时刻,我们都可以清点程序在执行过程中访问或影响的系统的不同部分,从而概括一个进程。

进程的机器状态

  1. 内存

    指令存在内存中,正在运行的程序读取和写入的数据也在内存中。因此进程可以访问的内存(地址空间)是该进程的一部分;

  2. 寄存器

    程序计数器(Program Counter, PC)指示程序即将执行哪个命令;

    栈指针(stack pointer)和相关的帧指针(frame pointer), 用于管理函数参数栈、局部变量和返回地址。

进程API

操作系统提供API的形式

  • 创建 create:操作系统必须包含一些创建新进程的方法
  • 销毁 destroy:由于存在创建进程的接口,因此系统还提供了一个强制销毁进程的接口。当然,很多进程会在运行完成后自动退出。
  • 等待 wait:有时等待线程停止运行是有用的,因此经常提供某种等待接口
  • 其他控制 miscellaneous control:除了扇死或等待进程外,有时还可能有其他控制。例如暂停进程,然后恢复(继续运行)
  • 状态 status:可以获取进程有关的状态信息的接口,例如运行了多长时间,或者处于什么状态

程序转换为进程的过程

  1. 将代码和所有静态数据(例如初始化变量)加载到内存中,加载到进程的地址空间中

    程序最初以某种可执行格式驻留在磁盘上。

    操作系统需要从磁盘读取这些字节,并将它们放在内存中的某处。

    现代操作系统惰性(lazily)执行该过程,即仅在程序执行期间需要加载的代码或数据片段,才会加载。想真正理解惰性加载,必须充分了解分页交换的机制。

加载:从程序到进程

  1. 为程序的运行时栈(run-time stack 或 tack)分配一些内存

    栈用来存放局部变量、函数参数和返回地址。

    操作系统分配内存,并提供给进程。

    操作系统可能也会用参数初始化栈。例如会将参数填入 main(int argc, char** argv)函数

  2. 操作系统可能为程序的堆(heap)分配一些内存

    堆用于显式请求动态分配数据,通过调用 malloc()请求空间,并通过调用free()明确释放堆

    数据结构(如链表散列表和其他有趣的数据结构)需要堆

  3. 操作系统还将执行一些其他初始化任务,特别是与输入/输出(I/O)相关的任务

    例如,在UNIX系统中,默认情况下每个进程都有3个打开的文件描述符(file descriptor),用于标准输入输出错误

通过将代码和静态数据加载到内存,通过创建和初始化栈以及执行与I/O 设置相关的奇台工作,操作系统开始启动程序,在入口处运行,一般是main() 函数。

通过跳转到 main() 例程,OS将CPU的控制权转移到新创建的进程中,从而程序开始执行。

进程状态

进程可以出在以下3种状态之一

  • 运行(running)

    在运行状态下,进程正在处理器上运行。意味着它正在执行指令

  • 就绪(ready)

    进程已经准备好运行,由于某种原因,操作系统选择不在此时运行

  • 阻塞(blocked)

    一个进程执行了某种操作,进入阻塞状态,直到发生其他事件时才会准备运行。
    进程:状态转换


>>>>> 欢迎关注公众号【三戒纪元】 <<<<<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值