进程抽象

进程抽象

1.进程API内容

  • 创建(create)
  • 销毁(destroy)
  • 等待(wait)
  • 其他控制(miscellaneous control)
  • 状态(statu)

2.进程创建

1.操作系统运行程序的第一件事是将代码和所有的静态数据加载(load)到内存中,加载到进程的地址空间中。
2.为程序的运行时栈,分配一些内存。C程序使用栈存放局部变量,函数参数,返回值。操作系统分配这些内存,并提供给进程。
3.操作系统也可能为程序的堆分配一些内存。
4.操作系统还将执行一些其他初始化任务,比如输入\输出相关的任务。

3.进程的状态

  • 运行:该进程正在执行指令
    1.运行态不会一直持续,进程的CPU时间片用完之后,再次失去CPU,从运行态转为就绪态。
  • 就绪:进程准备好运行,但是操作系统在运行其他进程
    1.进程被创建出来了,有运行的资格,但是还没有运行,需要抢占CPU时间片;
    2.得到CPU时间片,进程开始运行,从就绪态转换为运行态;
    3.进程的CPU时间片用完之后,再次失去CPU,从运行态转为就绪态。
  • 阻塞:进程被强制放弃CPU,并且没有抢占CPU时间片的资格
    1.比如当进程向磁盘发起I/O请求
    2.当阻塞任务完成,进程从阻塞态转换为就绪态

4.进程API

1.fork()系统调用

用于创建新进程,创建出来的进程被称为子进程,子进程与父进程几乎一样。子进程不会从main函数开始执行,而是直接从fork系统调用中返回。
子进程拥有自己的地址空间(即私有内存),寄存器,程序计数器等,但是它从fork返回的值是不同的。父进程获得的返回值是新创建子进程的PID,子进程获得的返回值是0.

子进程和父进程的相同点
1.拷贝完成后,两个地址空间的用户区数据是相同的。用户数据主要包括:

  • 代码区
  • 全局数据区
  • 堆区
  • 动态库加载区(内存映射区)
  • 栈区
  • 环境变量
  • 文件描述符:父进程中被分配的文件描述符都会被拷贝到子进程中,在子进程中可以使用他们打开对应的文件。

子进程和父进程的区别
1.父子进程各自的虚拟地址是相互独立的,不会互相影响和干扰。
2.父子进程的代码区虽然相同,但是执行的代码逻辑可能是不同的。一些情况下会用if判断父子进程,分别执行不同的代码块。
3.内核区存储的父子进程ID是不同的。
4.fork调用成功之后,会返回两个值,父子进程的返回值是不同的。


进程抽象
http://example.com/2025/02/22/OperatingSystem/进程抽象/
作者
ZhangHangming
发布于
2025年2月22日
许可协议