生产者消费者模型 生产者消费者模型 一、 生产者消费者问题 二、 问题分析 三、 伪代码实现 四、代码实现(C++) 五、 互斥锁与条件变量的使用比较 一、 生产者消费者问题 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了共享固定大小缓冲区的两个线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。 . 要解决该问题,就必须让生产者在缓冲区满时休眠(要么干脆就放弃数据),等到下次消费者消耗缓冲区中的数据的时候,生产者才能被唤醒,开始往缓冲区添加数据。同样,也可以让消费者在缓冲区空时进入休眠,等 继续阅读 >>


王良 18/08/11 00:43:20
问题 有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。每个哲学家的行为是思考,感到饥饿,然后吃通心粉。为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。 一个简单的解法是,用一个信号量表示一支筷子,这五个信号量构成信号量数组,所有信号量初始值为1,第I个哲学家的活动课描述为: semaphore chopstick[0…4] = {1,1,1,1,1}; Repeat think; wait(chopstick[i]); wait(chopstick[(i+1) mod 5]); eat; signal(chopstick[i]); signal(chopstick[(i+1) mod 5]); until false; 若五位哲学家同时饥饿而各自拿起了左边的筷子,这使五个信号量 chopstick 均为 0,当他们试图去拿起右边的筷子时,都将因无筷子而无限 继续阅读 >>


王良 18/07/12 10:56:35
1. 缓冲管理 为什么引入缓冲? (不想说了) I/O缓冲方式 1. 单缓冲    块设备输入时, 输入到缓冲区的时间为T, OS将数据从缓冲区传到用户区的时间为M, CPU处理这块数据的时间为C; 显然T和C是可以并行的。 2. 双缓冲   为了加快I/O速度提高设备利用率,又引入了双缓冲机制(缓冲对换 Buffer Swapping); 如果C“<”T, 块设备可连续输入 3.缓冲池(Buffer Pool) 缓冲池的组成 空缓冲链队列emp:由空缓冲区组成 输入缓冲链队列inq:由装满输入数据的缓冲区组成 输出缓冲链队列out:由装满输出数据的缓冲区组成 4种工作缓冲区 收容输入、提取输入、收容输出、提取输出。 从某队列上取下来操作完后再挂到另一队列上 对缓冲池队列操作的两个过程 缓冲池中的队列是临界资源要考虑互斥与同步 2. 设备分配(暂略) 3. 设备驱动 1.设备驱动程序的功能和特点 1.设 继续阅读 >>


刘生玺 18/07/11 11:30:46
主要内容: 1 I/O系统的组成 2 I/O 控制方式 3 缓冲管理 4 设备分配 5 设备驱动 6 磁盘存取设备管理 1. I/O系统的基本功能 隐藏物理设备的细节 与设备的无关性 提高处理机和I/O设备的利用率 对I/O设备进行控制 确保对设备的正确共享 错误处理 说明:1,2是为了方便用户使用I/O设备。3,4是用于提高CPU与I/O设备的利用率。5,6是为了用户在共享设备时提供方便,以保证系统能够有条不紊的运行,当系统发生错误时能够及时发现错误,甚至于自动修正错误。 2. I/O系统的层次结构和模型 (1)I/O软件的层次结构 1.用户层I/O 软件 2.设备独立性软件 3.设备驱动程序 4.中断处理程序 (2)I/O系统的分层 (1) 中断处理程序。 (2) 设备驱动程序。 (3) 设备独立性软件。 3. I/O 设备分类 1.按使用特性分 1. 存储型设备 2. 输入型设备(外设 => 继续阅读 >>


刘生玺 18/07/11 10:36:12
  磁盘存储器具有容量大、存取速度快、支持随机存取的特点,因此被广泛应用于计算机系统中。对于操作系统来说,管理好磁盘的三大要求和目标是: (1)合理有效利用磁盘:采用合理的文件存储空间分配算法,尽量减少磁盘碎片,提高硬盘的利用率; (2)提高磁盘的I/O速度:采用缓存等技术,提供访问速度; (3)提高磁盘可靠性:采用冗余和纠错检错等技术,保证磁盘的数据不会被破坏。 1. 外存的组织方式   文件是存放在磁盘上的,而磁盘是以盘块为基本的分配单位的,那么一个文件是怎么存放在磁盘上的呢,这就是外存的组织方式,主要有以下三种: 1.连续组织方式 2.链接组织方式 3.索引组织方式 文件的物理结构与外存分配方式有关,在采用连续分配方式时的文件物理结构是顺序式的文件结构,在采用链接分配方式将形成链接式文件结构,而索引分配方式将形成索引式文件结构。 1.1 连续组织方式:   要求为每一个文件分配一组相邻接的(也就是连续的)盘块。就好像分配一个连续的数组给文 继续阅读 >>


刘生玺 18/07/08 23:03:30
一:主要内容: 概述 文件的逻辑结构 ( 顺序文件,索引文件,索引顺序文件,直接文件和哈希文件 ) 外存分配方式 文件目录管理 文件存储空间管理 文件系统的可靠性和安全性 文件系统的数据一致性控制 文件管理,由于系统的内存有限并且不能长期保存,故平时总是把它们以文件的形式存放在外存中,需要时再将它们调入内存。如何高效的对文件进行管理是操作系统实现的目标。 二:文件和文件系统 2.1   现代OS几乎都是通过文件系统来组织和管理在计算机中所存储的大量程序和数据的。文件系统的管理功能是通过把它所管理的程序和数据组织成一系列文件的方法来实现的。而文件则是指具有文件名的若干相关元素的集合。元素通常是记录,而记录是一组有意义的数据项的集合。可以把数据组成分为数据项、记录、文件。      ①数据项,数据项是最低级数据组织形式。分为基本数据项(用于描述一个对象某种属性的字符集,是数据组织中可以明明的最小逻辑数据单位,即原子数据,又称为数据元素或字段)和组合数据项(由若干个基本数据项组成) 继续阅读 >>


刘生玺 18/07/07 16:11:32
0 内存管理概述 包括内存管理和虚拟内存管理。 内存管理包括:内存管理概念、交换与覆盖、连续分配管理方式和非连续分配管理方式(分页管理方式、分段管理方式、段页式管理方式)。 虚拟内存管理包括:虚拟内存概念、请求分页管理方式、页面置换算法、页面分配策略、工作集和抖动。 内存管理的概念 操作系统对内存的划分和动态分配 内存管理的功能 内存空间的分配与回收:由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高编程效率。 地址转换:在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供地址变换功能,把逻辑地址转换成相应的物理地址。 内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。 存储保护:保证各道作业在各自的存储空间内运行,.互不干扰。 1 存储器的层次结构 CPU 寄存器 寄存器 主存 高速缓存 主存 磁盘缓存 辅存 磁盘 可移动存储介质 寄存器,高速缓存,主存,磁盘缓存属于 继续阅读 >>


刘生玺 18/07/02 23:14:35
页面置换算法 在进程运行过程中,若需要访问的物理块不在内存中,就需要通过一定的方式来将页面载入内存,而此时内存很可能已无空闲空间,因此就需要一定的算法来选择内存中要被置换的页面,这种算法就被称为页面置换算法。页面置换算法的好坏,将直接影响系统的性能。 一个好的页面置换算法,应做到减少页面置换的频率。尽量将以后不会用到的或较长时间不会使用的页面给置换出。 下面介绍几种常用的页面置换算法。 1. 最佳置换算法 该算法是一种理想化的算法,具有非常好的性能,但是由于目前无法预知未来,因此难以实现。 该算法选择淘汰的页面是:未来永远不会再使用的页面 or 未来最长时间不再被访问的页面。该算法保证了可以获得最低缺页率,但无法预知未来页面的使用情况,因此目前无法实现,但通常用来评价其他算法。 例:假定系统为某进程分配了三个物理块,并考虑有以下的页面号引用串: 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 进程运行时,先将 7,0,1 三个页面装入内存。以 继续阅读 >>


王良 18/06/10 22:34:17
借由这个问题,今天我们就把 32 位 CPU、64 位 CPU、32 位操作系统、64 位操作系统之间的区别与联系彻底搞清楚。对于这个问题,博主也是一知半解了好长时间啊~ 基本概念 32位的CPU与64位CPU 以下内容摘自维基百科: 64 位 CPU 是指 CPU 内部的通用寄存器的宽度为 64 比特,支持整数的 64 比特宽度的算术与逻辑运算。那么 32 位 CPU 同理。 一个 CPU,联系外部的数据总线与地址总线,可能有不同的宽度;术语“64位”也常用于描述这些总线的大小。不过这一术语也可能指电脑指令集的指令长度,或其它的数据项。去掉进一步的条件,“64位”电脑架构一般具有 64 位宽的整数型寄存器,它可支持 64 位“区块”的整数型数据。 64 位架构无疑可应用在需要处理大量数据的应用程序,如数字视频、科学运算、和早期的大型数据库。 那么 32 位 CPU 与 64 位 CPU 到底有什么区别? 数据处理能力增强:64 位 CPU 通用寄存器的 继续阅读 >>


董恒毅 18/05/25 23:20:56
内存为什么要管理 在OS中,每个运行的进程都会占用内存,那么操作系统势必要做好两件事:内存分配和内存回收。这便是本次实验要做的模拟实验了。 内存分配策略 FF(首次适应算法) 这种策略旨在从最低地址的空闲分区开始找起,找到合适的便进行分配。内存空间按起始地址从小到大排序。 优点:查找速度快 缺点:低地址会留下较多的内存碎片,高地址则会存留大块空闲分区。 BF(最佳适应算法) 这种策略每次分配都将最小块的满足需求空闲分区拿去分配。内存空间按空闲区从小到大排序。 优点:保留大的空闲分区。 缺点:造成很多小的空闲分区。 WF(最差适应算法) 这种策略每次分配都将最大块的满足需求空闲分区拿去分配。内存空间按空闲区从大到小排序。 优点:不会留下许多小的内存碎片。往往可以装入多个大内存程序。 缺点:留下大空闲区的可能减少了。 内存管理实验内容 模拟操作系统,既然是模拟,那么自然比真正的内存分配简单很多。 程序中两个链表: 空闲内存区块表,包含该空闲区的起始地址以及 继续阅读 >>


李余通 17/11/10 18:56:25