12 [虚拟化] 进程抽象;fork,execve,exit

本文概述了操作系统中进程作为状态机的概念,重点讲解了fork、execve和exit三个关键API的作用:fork用于复制状态机,execve用于替换状态机,exit则用于终止状态机。通过实例和环境变量管理,展示了虚拟化过程如何通过硬件机制实现进程并发和隔离。

12 [虚拟化] 进程抽象;fork,execve,exit

南京大学操作系统课蒋炎岩老师网络课程笔记。

视频:https://www.bilibili.com/video/BV1N741177F5?p=12
讲义:http://jyywiki.cn/OS/2021/slides/8.slides#/

本讲概述

回到“操作系统是管理程序运行的软件”

  • 操作系统中的进程
    • 程序 = 状态机 (M,R)
    • 操作系统 = 多个状态机
  • 进程管理API
    • fork:状态机的复制
    • execve:状态机的重置
    • exit

再次强调,一定要深入理解:程序(进程)就是一个状态机

操作系统中的进程

复习:应用程序

应用程序 = 代码 + 数据(文件) = 状态机

  • a.out, bash, ls ,grep
  • gcc(cc1, as, collect2, ld)
  • xedit, vscode

复习:操作系统

操作系统是管理多个应用程序执行的软件。

  • 应用视角:操作系统就是一组系统调用
  • 硬件视角:操作系统就是个状态机(C程序)

理解“最小”操作系统:

如果硬件提供一些机制(如虚拟存储来虚拟化内存M和寄存器R,即(M,R))使得各个“线程”不能访问其他“线程”、操作系统的内存,就得到了虚拟化的“进程”,仿佛独占CPU运行。注意:这里是将运行在操作系统上的各个程序(进程)看做了是运行在操作系统这个大程序(进程)上的一些”线程“。

操作系统:状态机的虚拟化

操作系统“模拟”了其中所有程序的状态机

  • 这就是“虚拟化”
  • 程序仿佛自己独占CPU运行,但它独占的只是CPU的一部分,其他部分它“看不见”。

进程:运行的程序。任意时刻,进程都可以看做是状态机的状态。

操作系统在终端以后,可以选择将进程(状态机)调度到CPU上运行。而进程执行系统调用,会使用指令(syscall)等回到操作系统。

“操作系统是一个中断处理程序”

  • 被动的中断:硬件(时钟、I/O设备、NMI,)
  • 主动的中断:系统调用

操作系统运行的两种模式

  • 用户态(ring 3):应用程序运行在用户态
  • 内核态(ring 0):操作系统运行在内核态

二者的切换如上面所述:

  • 中断、系统调用:用户态 -> 内核态
  • 操作系统调度:内核态 -> 用户态

就是这样的切换,使得我们的应用程序(在用户态)实现了虚拟化,同时操作系统仿佛就是一个中断处理程序。

操作系统课的三种调用

  • 进程(状态机)管理

    fork, execve, exit:进程(状态机)的创建、改变和删除

  • 存储(地址空间)管理

    mmap:对进程虚拟地址空间的一部分进行映射

    brk:虚拟地址空间管理

  • 文件(数据对象)管理

    open, close:文件访问管理

    read, write:数据管理

    mkdir, link, unling:目录管理

fork() 状态机管理:创建状态机

如果需要创建状态机,我们需要什么样的API?

UNIX的答案:fork()

  • 做一份状态机的完整的复制(内存M,寄存器现场R)
  • 父进程返回子进程的PID,子进程返回0

fork bomb

fork bomb代码解析:

:(){
   
   :|:&};:  # 一行版本的fork bomb

:(){
   
   				 # 格式化一下
	: | 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值