现代操作系统读书笔记-第二章

第二章

2.1 进程

就操作系统而言,任何多道程序设计系统中的任何一个时刻CPU都只能运行一个进程。

进程的创建

    进程是如何创建的 通常有四种情况可以创建进程:

        1. 系统初始化

        2. 正在运行的程序执行了创建进程的系统调用

        3. 用户请求创建了一个新的进程

        4. 一个批处理作业的初始化

    在Windows和Unix系统中,被创建的子进程和父进程的地址空间是不同的。Unix中初始化的子进程的地址空间是父进程的副本,他们之间不可写的内存区间是共享的或者写时复制(copy on write)的空间也是共享的。Windows系统中父子进程在初始化时地址空间就是不同的。

进程的终止

    线程的终止也有四种情况:

        1. 正常退出

        2. 出错退出

        3. 严重错误

        4. 被其他进程杀死

进程的层次结构

    Unix: 操作系统会在启动时,一个称为init的线程会出现在启动映像中,知道系统启动完成。后续的所有操作所产生的进程都会是从init中散发出去的。所以在Unix系统中所有的进程都属于一颗以init为根的树。在Unix系统中父进程和多个子进程会组成一个进程组,当系统接收到一个信号时会将信号发送给整个组,组中不同的进程可以对信号做出不同的响应。

     Windows: 父子进程之间没有绝对的继承关系,父进程通过句柄来控制子进程,而句柄是可以转让的。也就是说Windows系统中进程之间不存在进程层次。

进程的状态

    进程有多种状态,通常包括以下几种 阻塞 就绪 运行

进程的实现

    为了实现进程模型,操作系统中维护了一张进程表,每个进程占用其中一个表项。表项中包含了很多进程重要的信息包括程序计数器、堆栈指针、内存分配状况、打开文件的状态、账号和调度信息。

    接下来实现多线程最重要的一环就是中断向量。换句话叫保护线程,当线程的时间片消耗完毕或因其他情况所导致的线程切换,都需要保护当前现场以便恢复。中断都是从保存寄存器开始,随后会从堆栈中删除因中断硬件机制所保存的信息,并将堆栈指针指向当前进程处理程序所使用的临时堆栈。当例程结束后,通常会有进程就绪,接着调度程序就会决定切换到哪个进程。

    记录一下书中介绍的中断发生后操作系统最底层的工作步骤:

        1. 硬件压入堆栈程序计数器等

        2. 硬件从中断向量装入新的程序计数器

        3. 汇编语言过程保存寄存器值

        4. 汇编语言过程设置新的堆栈

        5. C中断服务例程运行(典型地读和缓冲输入)

        6. 调度程序决定下一个将运行的进程

        7. C过程返回至汇编代码

        8. 汇编语言过程开始运行新的当前进程

2.2 线程

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值