代码炼金工坊

操作系统概论-进程管理

进程描述

前置概念

程序是静态的,具有独立功能的一组指令的集合

进程的概念

进程是操作系统的核心。

进程是允许并发执行的程序在某个 数据集合 上的 运行过程

具有如下特征:

进程控制块

操作系统中 最重要的数据结构

记录了操作系统需要的、用于 描述进程及控制进程运行 所需的全部信息:

进程的状态

进程的组织

进程的控制

进程的控制包括:创建、阻塞、唤醒和终止。

创建

条件:用户登录、作业调度、提供服务、应用请求

创建过程:

执行可能:

地址空间可能:

阻塞

条件:请求系统服务、启动某种操作、新数据尚未到达、无新工作可做

阻塞过程:

唤醒

唤醒过程:

终止

条件:正常执行完毕

终止过程:

操作系统内核

内核执行操作系统与硬件关系密切、执行频率高的模块,常驻内存。

支撑功能:中断处理、时钟管理、原语操作

资源管理功能:进程管理、存储管理、设备管理

中断

改变处理器执行指令顺序 的一种事件。

出现中断时,计算机 停止现在程序的运行 ,转向 对这些中断事件的处理 ,处理结束后再 返回到现行程序的间断处

分类:

原因:

响应:

中断的处理

单重中断处理:

单重终端

多重中断处理:

时钟

计算机系统的脉搏, 计算机很多活动由 定时测量 驱动

分类:

OS 时钟管理机制:

操作系统内核需要完成的两种定时测量是 保存当前的日期和时间维持定时器

可编程定时计数器

每一次晶振,计数器加1,满了一个周期则保持寄存器加1,而计数器重置。

系统调用

一群 预先定义好的模块

提供 一条管道应用程序 能由此到 核心程序 的服务。

系统调用是系统程序用户程序 之间的 接口

与一般函数调用的区别:

怎么理解用户态和系统态?

用户进程所在的地址空间称为用户空间。

CPU 执行用户空间的代码时, 进程处于用户态执行。

含有一切系统核心代码的地址空间称为系统空间。

CPU 执行系统核心代码时,进程处于系统态执行。

类型:

进程同步

定义

进程并发地执行,共享系统的资源。共享过程由操作系统进行控制和管理。

同步机制 保证多任务共享系统资源的情况下,程序执行能得到正确的结果。

信号量机制 实现进程同步。

基本概念

多道程序环境下进程之间的关系可分为:

如何理解临界资源和临界区?

必须 以互斥方式访问 的共享资源称为 临界资源

进程中 访问临界资源代码片段 称为 临界区

同步准则

  • 进入区:检查进程是否可以进入临界区并对临界区加锁
  • 临界区
  • 退出区:对临界区解锁

空闲让进、忙则等待、有限等待、让权等待

信号量机制

信号量 的取值来表示资源的使用状况,以此为基础实现进程同步。

分类:

var s int;
wait(s); // 申请资源
{
    while s <= 0 do no-op;
    s = s - 1;
}
signal(s); // 释放资源
{
    s = s + 1;
}
// 临界区代码
{
    wait(s);
    CS // do with critical resources
    signal(s);
}
type semaphore = record
    value: integer; // 资源数量 
    // value < 0 时表示资源数量
    // value < 0 时绝对值表示阻塞进程数量
    l: list of process; // 阻塞队列
end;

var s semaphore;

wait(s);
{
    s.value = s.value - 1;
    if s.value < 0 then block(s.l);
}
signal(s);
{
    s.value = s.value + 1;
    if s.value <= 0 then wakeup(s.l);
}
swait(s1, s2, ..., sn);
{
    if s1 >= 1 and ... sn >= 1 then
        for i = 1 to n do si = si - 1
        end for;
    else
        // 把进程插入si阻塞队列,并把程序计数器赋值为swait的起始地址
    end if
}
ssignal(s1, s2, ..., sn);
{
    for i = 1 to n do 
        si = si + 1;
        // 将阻塞在si队列中的进程唤醒,插入就绪队列
    end for;
}

进程通信

前三者是 高级通信机制

线程

概念

线程是 进程中 可以 独立执行子任务

线程是进程中的一个实体,是被系统 独立调度和分派基本单位

线程只拥有在运行中必须的资源,包括 程序计数器一组寄存器和栈 ,但它可与统一进程中的其他线程 共享进程所拥有的全部资源

分类

三种基本状态

和进程类似,运行态、阻塞态和就绪态。

线程控制块

TCB ,表示线程基本状态的数据结构。

线程与进程关系

线程的控制