preparing Learn --> pyautoit
操作系统提供的服务
{
用户接口
程序执行
I/O操作
文件管理
错误处理
}
操作系统特征
{
并发性
共享性
随机性
}
微内核
{
线程调度
虚拟存储
消息传递
设备驱动
中断处理
}
POSIX: 最小系统调用接口 --Linux,Windows等都支持。
硬件)Unix内核)系统调用接口)UNIX命令和库
Linux
{
硬件)内核)系统调用)外壳(shell,X-Windows)
}
第二章 进程和线程
{
进程
{
特点
{
动态性
并发性
非对应性
异步性
}
进程状态
{
运行状态
就绪状态
阻塞状态
(新建状态、终止状态)
}
进程映像
{
进程控制块(PCB)Process Control Block
一般包含内容{
1.进程标识 name
2.进程当前状态 status
3.当前队列指针 next
4.执行程序开始地址 start_addr
5.进程优先级 priority
6.CPU现场保护区
7.通信信息
8.家族联系 process family
9.占用资源清单 own-resource
}
进程组成
{
进程控制块PCB
程序段
数据段
}
PCB链接方式: 队列
运行指针,就绪指针,阻塞指针,空白指针
进程通信
{
1.共享存储器系统
2.消息传递系统
{
a. 直接通信方式
Send(receiver,message)
Receive(sender,message)
b. 间接通信方式
信箱方式
}
3.管道通信
{
利用共享文件连接相互通信的进程
互斥
同步
判读是否存在
}
}
!线程 thread
{
TCB 线程控制块 thread control block
{
状态
调度信息
线程标识
现场信息
线程私有存储区
指针(指向PCB)
}
状态
{
运行、就绪、阻塞
线程不是资源的拥有单位
}
线程分类:
{
核心级线程
用户级线程
}
}
Linux进程
{
进程通信:
{
消息队列
消息管道
{
有名管道--> 长期存在
无名管道--> 调用pipe()建立的临时文件。
进程互斥
进程同步
确定对方进程存在
}
}
}
栈
程序执行
数据集合
}
}
}
第三章 处理机调度
{
完成进程选择工作的部分–> 调度程序
作业调度、交换调度、进程调度
进程调度
{
1.保存现场
2.挑选进程
3.恢复现场
调度方式
{
1.非抢占调度方式
2.抢占调度方式
{
优先权原则
短进程优先原则
时间片原则
}
}
调度算法:
{
1.先来先服务
First Come First-Served-->FCFS
2.短作业优先法
Shortest-Job-First -->SJF
3.最短剩余时间优先法
Shortest Remaining Time First -->SRTF
抢占式算法
4.高响应比优先
Highest Respoonse Ratio First --> HRRF
响应比 = 1 + 已等待时间/估计运行时间
5.优先级调度
Priority Scheduling, -->PS
6.时间片轮转发
Round Robin --> RR
7.多级队列法
Multilevel Queue --> MQ
8.多级反馈队列 ->最通用的CPU调度算法
Multilevel Feedback Queue -->MFQ
}
用户级线程调度 :
{
可能: A1,A2,A3,B1,B2,B3
不可能:A1,B1,A2,B2,A3,B3
核心级线程调度
可能: A1,A2,A3,B1,B2,B3
也可能: A1,B1,A2,B2,A3,B3
}
多处理器调度
{
1.松散耦合多处理器系统 : 每台处理器有自己的内存,IO,OS
2.主从多处理器系统 : 所有系统调度由主控机完成
3.紧密耦合多处理器系统 : 一组处理器共享内存,同一OS下工作
}
}
}
第四章 进程同步与死锁
{
与时间有关的错误
进程的同步和互斥
{
同步: 进程运行到某一时间点时,需等到其它进程完成某一步操作
从而才能继续运行。
互斥: 共享资源-> 互斥共享资源,不可同时访问资源
}
临界资源: 只允许一个进程访问的共享资源。许多硬件设备都为临界资源。
临界区 P94
{
1.入口区: 对能否被访问进行判断
2.临界区: 访问临界资源的代码
3.退出区: 清除临界资源占用标志
4.其余代码区: 其余代码
}
临界区访问准则
{
1.空闲让进
2.忙则等待
3.有限等待: 访问限时
4.让权等待: 若进程不能进入自己的临界区,则应该停止运行,让出处理器
}
互斥实现方法
{
硬件方法
{
1.禁止中断
2.机器指令
TS指令 (通过Test标志位实现)
Swap指令?? 不断互换key,x值,直到x = 0 表示可进入
{
x = 1
while(x!= 0) swap(&x,&key);
临界区;
key = 0;
}
}
软件方法 内存级别的访问互斥
{
P98.
}
信号量
{
P(mutex); 阻塞操作
临界区;
V(mutex); 释放临界资源
AND信号机制:
}
}
}}