Skip to content

Latest commit

 

History

History
executable file
·
99 lines (55 loc) · 4.7 KB

基础知识.md

File metadata and controls

executable file
·
99 lines (55 loc) · 4.7 KB

操作系统基础

1. 信号量

信号量是一个用于进程间传递信息的整数值,在信号量上可以进行三种操作:初始化,递减,递增

这里我们有两个函数: semWait将信号量递减, semSignal将信号量递增

一个进程A执行semWait操作,如果信号量的结果值大于等于0,则这个进程可以继续执行,如果这个值小于0则阻塞进程A 也就是说,信号量为正数的时候,表示发出semWait后即可执行的进程的数量,信号量为负值的时候,绝对值为当前阻塞的进程的数量 如果当前的信号量为负值,一个进程B发出semSignal操作,将使阻塞的进程中的一个进程解禁。

2. 二元信号量

顾名思义,二元信号量只有两个值0或1 一个进程执行semWaitB操作时,检查信号量的值,如果为1,将其置0并继续执行,如果为0,则阻塞此进程 semSignalB操作将信号量置1并检查是否有任何进程在该信号上受阻。若有进程受阻,则通过semWaitB操作,受阻进程被唤醒

通过信号量,可以实现进程访问资源的互斥

3. 管程

管程是有一个或多个过程,一个初始化序列和局部数据组成的软件模块,主要特点如下

  1. 局部数据变量只能被管程的过程访问,任何外部过程都不能访问
  2. 一个该进程通过调用管程的一个过程进入管程
  3. 在任何时候,只能又一个进程在管程中执行,调用管程的任何其他进程都被阻塞,以等待管程可用

4. 死锁的条件

  1. 互斥 一次只能有一个进程可以使用一个资源,其他进程不能访问
  2. 占有且等待 当一个进程等待其他进程时,继续占有已分配的资源
  3. 不可抢占 不能强行抢占进程已占有的资源
  4. 循环等待 存在一个闭合的进程链,每个进程至少占有此链中下一个进程所需要的一个资源

死锁避免

若一个进程的请求会导致死锁,则不启动该进程,一个非最优的策略是如果一个进程请求资源i的数量量加上已分配的资源i的数量大于系统中资源i的总量则不启动该进程

若一个进程增加的资源请求会导致死锁,则不允许这一资源的分配(银行家算法)

5. Unix进程间通信

管道

管道是一个环形的缓冲区,他允许两个进程以生产者/消费者的模型进行通信。这是一个先进先出的队列,由一个进程写,另一个进程读。 管道在创建时获得一个固定大小的字节数,当一个晋城市图往管道中写时,如果有足够的空间,则立即执行写请求,否则阻塞;当一个进程试图读取的字节数多于管道中的字节数时,也被阻塞,否则立即执行读请求。操作系统强制实施互斥,一次只能有一个进程可以访问管道

管道分为两类 : 命名管道和匿名管道。只有具有血缘关系的进程才可以共享匿名管道,而不相关的进程只能共享命名管道

消息队列

共享内存

信号量

6. 内存管理

内存分区

固定分区

会产生内部碎片

动态分区

会产生外部碎片

分页

将内存分为很小的页,称为页框,一般为1024的倍数,如4K, 进程也分为同样大小的页,放入页框中。为每一个进程维护一个页表描述使用了那些页,用来计算逻辑地址到物理地址的映射

分段

段是按照程序的自然分解划分的可以动态改变的区域,通常程序员把子程序,操作数,常数等不同类型的数据划分到不同的段中,并且每个程序可以有多个相同类型的段,分段通常对程序员是可见的,因而分段为组织程序和数据提供了方便。

  • 优点
  1. 段的逻辑独立性使其易于编译,管理,修改和保护,也便于多道程序共享
  2. 段长可以根据需要动态改变,允许自由调度,以便有效利用主存空间
  3. 方便编程,分段共享,分段保护,动态链接,动态增长
  • 缺点
  1. 主存空间分配比较麻烦
  2. 容易在段间留下许多碎片,造成存储空间利用率降低

7. 进程与线程的区别

  • 一个进程可以包含多个线程,且至少有一个;
  • 进程是系统进行资源分配的基本单位,线程是CPU调度和分派的基本单位;进程拥有独立的地址空间,其内存空间线程共享;
  • 线程的划分尺度小于进程,多线程程序的并发性高;
  • 线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。