操作系统-2

简介: -

进程与线程

PCB-进程控制块

进程标识符

处理机状态

进程调度信息

目的--为了使参与执行的每个程序独立运行

作用

  1. 作为独立运行基本单位的标志
  2. 提供进程管理所需要的信息
  3. 提供进程调度需要的信息
  4. 实现与其他进程同步的通信
  5. 实现间断性方式

1、进程PCB包含的字段是进程ID,进程组ID,父进程和子进程,堆指针,程序计数器,调度状态(运行,就绪,阻塞),权限(允许进程的系统资源)访问),通用寄存器的内容和打开的文件。2、线程TCB包含的字段(寄存器值,堆栈指针,程序计数器,调度状态),以及一些特定值,如线程id和指向包含该线程的进程的指针。请注意,线程之间没有保护。

原语

若干条指令组成,用于完成一定功能的一个过程

特点----不可被分割,要不全做,要不全不做

举例---激活原语active,挂起原语suspend

P-C问题中,能否使生产者进程中的两条wait 原语交换顺序?为什么?

不能交换顺序,初始顺序是同步信号量在前面,互斥信号量在后面,要先判断缓冲池里有没有产品,再决定是否要进去,如果缓冲池里没有产品,wait(empty)进去了之后,signal(full)是释放信号量是无法知道的。

进程--

特征--独立异步动态并发

创建,终止

就绪,运行,阻塞(不占用cpu)--基本状态

就绪挂起,阻塞挂起

当进程进入阻塞状态时,会占用大量内存,因此采用挂起状态将阻塞和就绪的进程放入虚拟内存(硬盘),判断是否挂起就是通过页表

状态转变:

创建和运行也可以被挂起变为就绪挂起状态

线程--TCB

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源

进程同步与互斥

临界资源 ----一次仅允许一个进程使用的资源。

临界资源的访问

1)进入区。在进入区要检查可否进入临界区,如果可以进入临界区,则应设置正在访问临界区的标志,以阻止其他进程同时进入临界区。
2)临界区。进程中正在访问临界资源的那段代码,又称临界段。
3)退出区。将正在访问临界区的标志清除。
4)剩余区。代码中的其余部分。

信号量、临界区定义

  • 临界区:并发进程中,每个进程访问临界资源的代码称为临界区
  • 信号量
  • 整型信号量:开一个整型变量S
  • 记录型信号量:整型信号未实现“让权等待”,多定义一个变量list,来存储让权了的进程
  • AND型信号量:多个进程共用多个临界区资源

实现同步与互斥

  • :加锁、解锁操作;
  • 信号量:P、V 操作(wait和signal);

同步

同步为直接制约,两个进程是有顺序的,

防止两个同时进入等待区,需满足空闲让进,忙则等待,有限等待,让权等待

互斥

互斥为简介制约,一个执行,另一个需等待,没有顺序

锁--实现互斥

在进程的操作前加锁,后去锁,也就是拍照的房间,有人在里面,外面的人就无法进行拍照。

在程序中,一个进程上锁,另一个进程会进入忙等,直到解锁后,该进程才会进入临界区,这就是忙等待锁,也就是自旋锁。

忙等时,该进程仍然占用CPU,还有一种锁在上锁时,另一个进程会进入等待队列,让出CPU,该锁叫为无等待锁,也就是互斥锁

避免死锁的一个方法银行家算法

各种锁

信号量--实现互斥

设置信号量S,

  • 初值为1,表示未被占用
  • 变为0,表示有一个进入
  • 变为-1,表示一个进入,一个等待

单个进程变化

1-->0

P-->访问资源--->V

互斥情况,每个进程都需要先进行P操作,然后对灵界资源访问,最后执行V操作

整个信号量变化

当执行P操作,初值会变为0,表示该资源可以被分配,这时,另一个进程执行P操作,会使信号量变为-1,表示该该临界资源被占用,进程会阻塞

信号量--实现同步

设置信号量S,

  • 初值为0,表示不需要
  • 负数表示等待

举例子

妈妈叫儿子吃饭这个过程

初始化

  • 做饭--cook=0
  • 吃饭--eat=0

过程

  1. 妈妈向儿子发送是否吃饭请求,然后等待回应
  1. P(eat)操作
  1. eat变成-1
  1. 儿子发送吃饭回应,然后发送是否做饭请求,然后等待回应
  1. V(eat)操作,P(cook)操作
  1. eat变成0,cook变成-1
  1. 妈妈收到做饭回应,执行做饭,然后发送做饭回应
  1. V(cook)操作
  1. cook变成0
  1. 儿子收到做饭的回应,被唤醒,开始吃饭

分析

首先,需要一个先执行V操作,后执行P操作,另一个先执行P操作,后执行V操作

其次,先执行V操作可以看作是同步开启的条件

消费者-生产者

int in=0,out=0;

item buffer[n];

auto mutex=1,empty=n,full=0;

void producer{

   while(1){

       new temp;

       wait(empty);

       wait(mutex);

       buffer[in]=temp;

       in=(in+1)%n;

       signal(mutex);

       signal(full);

   }

}

 

void consumer(){

   while(1){

       wait(full);

       wait(mutex);

       int good=buffer[out];

       out=(out+1)%n;

       signal(mutex);

       signal(empty);

   }

}

同步问题

哲学家就餐--对于互斥访问有限(I/O设备)有效

问题:五个哲学家在桌子上思考,吃饭,桌子上有一只筷子,两只筷子才能吃饭,尽快可能思考合理的方案

网上的四种方案

  1. 全拿一边的叉子,人人没饭吃
  2. 一个人拿左右两个,导致每次只能一个人吃饭
  3. 按偶数或奇数来选择吃饭的人,可以每次两人吃饭
  4. 添加一个条件,需要满足,左边和右边的人都没有进餐,那么这位哲学家可以进餐,进餐完通知其他哲学家。

读者,写者

读者-写者的问题描述:

  • 「读-读」允许:同一时刻,允许多个读者同时读
  • 「读-写」互斥:没有写者时读者才能读,没有读者时写者才能写
  • 「写-写」互斥:没有其他写者时,写者才能写

三种方案

  1. 读者优先
  1. 设置变量:读者的人数,控制写操作的信号量,控制写操作互斥的信号量
  1. 写者优先
  1. 读者的人数,控制读操作的信号量,控制读操作互斥的信号量,写者的人数,控制写操作的信号量,控制写操作互斥的信号量
  1. 公平

例题-GET,PRO,PUT

写入与取出都是先wait后signal,区别是增加空的数目还是有数据的数目

需要先设置变量

然后实现方法

GET---输入BUF1

whiel(1){

wait(empty1);

   wait(matex1);

   执行输入

   signal(matex1);

   signal(full1);

}

PRO---从BUF1取出,写入到BUF2中

whiel(1){

wait(full1);

   wait(matex1);

   执行取出

   signal(matex1);

   signal(empty1);



wait(empty2);

   wait(matex2);

   执行输入

   signal(matex2);

   signal(full2);

}

PUT--从BUF2读取并输出

whiel(1){

wait(full2);

   wait(matex2);

   执行取出

   signal(matex2);

   signal(empty2);

}

目录
相关文章
|
5月前
|
Java Linux 调度
初识操作系统
初识操作系统
41 3
|
2月前
|
缓存
操作系统系列(一)
操作系统系列(一)
|
6月前
|
存储 算法 API
深入操作系统(什么是操作系统)
深入操作系统(什么是操作系统)
73 1
|
监控 机器人 调度
操作系统概论——操作系统
操作系统概论——操作系统
78 0
|
存储 算法 人机交互
基础夯实:操作系统 (下)
基础夯实:操作系统 (下)
|
消息中间件 存储 资源调度
操作系统总结
操作系统总结
110 0
|
存储 缓存 安全
|
安全 算法
|
算法 调度 索引
|
存储 消息中间件 缓存
操作系统常用知识总结!
现代计算机模型是基于-「冯诺依曼计算机模型」计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去,接下来,再取出第二条指令,在控制器的指挥下完成规定操作,依此进行下去。直至遇到停止指令程序与数据一样存贮,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作是计算机最基本的工作模型「计算机五大核心组成部分」控制器:是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。运算器:运算器的功能是对数据
下一篇
无影云桌面