操作系统
wae_gossip
这个作者很懒,什么都没留下…
展开
-
抢占进程调度的原则
(1)时间片原则:各进程按系统分配给的一个时间片运行,当该时间片用完或由于该进程等待某事件发生而被阻塞时,系统就停止该进程的执行而重新进行调度。 (2)优先级原则:每个进程均赋于一个调度优先级,通常一些重要和紧急的进程赋于较高的优先级。当一个新的紧迫进程到达时,或者一个优先级高的进程从阻塞状态变成就绪状态的时,如果该进程的优先级比当前进程的优先级高,OS就停止当前进程的执行,将处理机分配给该原创 2012-05-16 09:48:25 · 4583 阅读 · 0 评论 -
架构设计:生产者/消费者模式[3]:环形缓冲区
前一个帖子 提及了队列缓冲区可能存在的性能问题及解决方法:环形缓冲区。今天就专门来描述一下这个话题。 为了防止有人给咱扣上“过度设计”的大帽子,事先声明一下:只有当存储空间的分配/释放非常频繁 并且确实产生了明显 的影响,你才应该考虑环形缓冲区的使用。否则的话,还是老老实实用最基本、最简单的队列缓冲区 吧。还有一点需要说明一下:本文所提及的“存储空间 ”,不仅包括内存,还可能包括诸如硬盘之类转载 2012-05-18 09:39:51 · 623 阅读 · 0 评论 -
架构设计:生产者/消费者模式[0]:概述
今天打算来介绍一下“生产者/消费者模式”,这玩意儿在很多开发领域都能派上用场。由于该模式很重要,打算分几个帖子来介绍。今天这个帖子先来扫盲一把。如果你对这个模式已经比较了解,请跳过本扫盲帖,直接看下一个帖子(关于该模式的具体应用) 。 看到这里,可能有同学心中犯嘀咕了:在四人帮(GOF)的23种模式里面似乎没听说过这种嘛!其实GOF那经典的23种模式主要是基于OO的(从书名《Design P转载 2012-05-18 09:16:22 · 332 阅读 · 0 评论 -
架构设计:生产者/消费者模式[2]:队列缓冲区
经过前面两个帖子的铺垫,今天终于开始聊一些具体的编程技术了。由于不同的缓冲区类型、不同的并发场景对于具体的技术实现有较大的影响。为了深入浅出、便于大伙儿理解,咱们先来介绍最传统、最常见的方式。也就是单个生产者对应单个消费者,当中用队列 (FIFO)作缓冲。 关于并发的场景,在之前的帖子“进程还线程?是一个问题! ”中,已经专门论述了进程和线程各自的优缺点,两者皆不可偏废。所以,后面对各种缓冲转载 2012-05-18 09:30:17 · 407 阅读 · 0 评论 -
架构设计:生产者/消费者模式[4]:双缓冲区
“双缓冲区”是一个应用很广的手法。该手法用得最多的地方想必是屏幕绘制相关的领域(主要是为了减少屏幕闪烁)。另外,在设备驱动和工控方面,双缓冲也经常被使用。不过今天要聊的,并不是针对上述的某个具体领域,而是侧重于并发方面的同步/互斥开销。 ★为啥要双缓冲区 记得前几天在介绍队列缓冲区 时,提及了普通队列缓冲区的两个性能问题:“内存分配的开销”和“同步/互斥的开销”(健忘的同学,先回转载 2012-05-18 10:11:12 · 2108 阅读 · 0 评论 -
临界区域问题【2】
do{ flag[i]=true; turn=j; while(flag[j]&&turn==j); //临界区 假设i在临界区(flag[i]==true&&turn==j),这时候j已经等待了(flag[j]==true&&turn==i) flag[i]=false; //剩余区 } while(1);i的:do{ turn=j; while(turn==j);原创 2012-05-22 09:28:43 · 339 阅读 · 0 评论 -
临界区域问题
问题:教材:operating system concepts [sixth edition]的汉化版,高等教育出版社原著:Abraham Silberschatz问题:临界区域问题(7章2小节)描述:书中对解决两个进程的临界区域问题提出以下这样1个解决方案,并给出 评述,在下关键对评述不理解。 解决方案:让两个进程共享一个 普通变量turn转载 2012-05-21 10:27:52 · 853 阅读 · 0 评论 -
进程状态
三态模型:在多道程序系统中,进程在处理器上交替运行,状态也不断地发生变化。进程一般有3种基本状态:运行、就绪和阻塞。(1)运行:当一个进程在处理机上运行时,则称该进程处于运行状态。处于此状态的进程的数目小于等于处理器的数目,对于单处理机系统,处于运行状态的进程只有一个。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。(2)就绪:当一个进程获得了除处理机以外转载 2012-05-23 09:36:21 · 601 阅读 · 0 评论 -
程序圧栈的顺序
最近看前人写了一篇文章,是关于堆栈的相关知识,里面讲到了程序圧栈的顺序,很是经典,现转贴原帖,顺,膜拜之:堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程转载 2012-06-28 10:49:24 · 502 阅读 · 0 评论