操作系统
辣条不爱辣
如切如磋,如琢如磨
展开
-
处理机调度-先来先服务调度(FCFS)
在多道程序系统中,调度的实质是一种资源分配。处理机调度是对处理机资源进行分配。处理调度算法是指根据处理机分配策略所规定的的处理机分配算法。此系列都是实现的非抢占的调度算法。先来先服务调度:按照进程的先后进入次序进行调度输入:作业的数目,作业的到达时间与服务时间.输出:作业的调用序列与其周转时间与结束时间。运行结果:所需要的数据结构://进程struct P...原创 2018-09-29 10:52:02 · 1630 阅读 · 0 评论 -
异步编程-模拟异步调用
传统应用程序在调用一个方法时,需要等待该方法执行完成并返回调用处,然后再继续执行调用处后面的语句,但如果调用的方法本身需要执行较长的时间,则程序将长时间的等待。如果希望在调用一个方法时,能在该方法没有执行完成的时候继续执行其他代码,则需要异步编程。异步编程的基本思想是,向其他组件发出方法调用,继续执行其他任务,而不用等待调用的操作完成在多线程编程中,每个线程同时执行各自的任务,开发者必须在...原创 2018-12-01 19:43:46 · 446 阅读 · 0 评论 -
线程同步-手工同步
.Net还提供了几个手工同步的类,可以使用它们来创建自己的同步机制,手工同步一般用于一下情况:对多线程共享变量的同步访问,线程间或跨进程的同步,实现单个写、多个读的同步。下面介绍ReadWriterLock类。该类提供单个进程写和多个进程读的控制机制,其优点是资源开销非常低。该类有两个锁,读线程锁与写线程锁。当请求写线程后,在写线程取得访问权之前,不会接受任何新的新的读线程,从而实现多个线程在...原创 2018-12-01 16:40:57 · 169 阅读 · 0 评论 -
线程同步-同步代码区
该策略只对特定的代码区域进行同步操作。这些特定的代码区一般多为方法中重要的代码段。除了可以同步实例方法外,该策略还可以对静态方法实施同步。.Net提供了很多类用于支持同步代码区。Moniter类用于同步代码区,其思想是首先使用Monitor.Enter()方法获得一个锁,然后使用Moniter.Exit()方法释放该锁。一个线程一旦获得重要代码区的锁,其他线程只有等到该锁被释放后才能使用该代码...原创 2018-12-01 15:42:48 · 338 阅读 · 0 评论 -
线程同步-同步上下文
在多线程编程中,当多个线程共享数据和资源时,根据主线程调度机制,线程将在没有警告的情况下中断和继续,因此多线程处理存在资源共享和同步问题。多线程同步:在任一时刻,只允许一个线程访问资源。上下文是一组有序的属性或规则。这组属性或规则将类似的对象绑定在一起,同步上下文策略就是使用.Net提供的SynchronizationAttribute类的构造函数对驻留在上下文中、符合上下文规则的对象启用...原创 2018-12-01 14:59:12 · 918 阅读 · 0 评论 -
线程控制
进程和线程是现代操作系统的重要概念。前者是应用程序的实例,一个正在运行的应用程序在操作中被视为一个进程。为了使多个任务互不干扰的进行,每个进程都拥有独立的虚拟地址空间、代码段、数据段及堆栈等。另外,进程还占了各种系统资源(如文件、窗体对象。环境变量等)。进程拥有自身独立的资源,进程之间相互隔离,互不干扰。线程是操作系统分配处理器时间的基本单元,他也是一组指令的集合,可以在程序中独立执行,所以有...原创 2018-12-01 14:22:17 · 227 阅读 · 0 评论 -
磁盘调度-循环扫描(CSCAN)
SCAN算法既能获得较好的寻道性能,又能防止饥饿现象。但是存在这样的问题:当磁头刚从里向外移动而超越了某一磁道时,恰好又有一进程请求访问此磁道,这时该进程必须等待。将磁头继续从里向外,然后再从外向里扫描完处于外面的所有要访问的磁道后,才处理该进程的请求,致使该请求的请求被大大的推迟。为此,CSCAN算法规定磁头单向移动,如果只是从里向外移动,当磁头移到最外的磁道并访问时,磁头立即返回到最里的欲...原创 2018-09-30 19:38:27 · 28498 阅读 · 3 评论 -
磁盘调度-扫描(SCAN)
SSTF算法的实质是基于优先级的调度算法,因此就可能导致优先级低的进程发生继而现象。因为只要不断有新进程的请求到达,且要访问的磁道与磁头当前磁道的距离较近,这种新进程的IO请求必然优先满足。扫描算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑磁头当前的移动方向。例如向外移动时,所考虑的下一个访问对象是其欲访问的磁道既在当前磁道之外,又是距离最近的。从里向外访问,直至再无更外的磁道需要访...原创 2018-09-30 19:29:31 · 2154 阅读 · 0 评论 -
磁盘调度-最短寻道时间优先(SSTF)
最短寻道时间优先:其要求访问的磁道与当前磁头所在的距离最近。算法思想:首先排序,找出当前第一个大于等于当前磁头所在位置,设置两个指针,分别代表左右两个磁道号,比较两个磁道号大小即可得到离起始磁道最近的磁道,然后更新即可。输入:起始磁道以及要访问的磁道数目,要访问的磁道号。输出:被访问的下一个磁道号和移动距离, 最后是平均寻道长度。运行结果:数据结构://num为进程请...原创 2018-09-30 19:19:57 · 6489 阅读 · 0 评论 -
磁盘调度-先来先服务(FCFS)
为了减少对文件的访问时间,应采用一种最佳的磁盘调度算法,以使各进程对磁盘的平均访问时间最小,由于在访问磁盘的实际那中主要是寻道时间,因此磁盘调度的目标是使磁盘的平均寻道时间最少。先来先服务:根据进程请求访问磁盘的先后次序进行调度。输入:起始磁道以及要访问的磁道数目,要访问的磁道号。输出:被访问的下一个磁道号和移动距离, 最后是平均寻道长度。运行结果:使用的数据结构:/...原创 2018-09-30 19:07:11 · 3043 阅读 · 0 评论 -
页面置换-最近最久未使用置换(LRU)
最近最久未使用置换:选择最近最久未使用的页面予以淘汰。赋予每个页面一个访问字段,用以记录一个页面自上次被访问以来所经历的时间t,当需淘汰一个页面,选择t值最大的。输入:内存物理块的大小,以及页面号引用串的大小,引用串的各个页面编号。输出:被置换出去的页面编号。运行结果:所需的数据结构://页面struct Page{ int id; ...原创 2018-09-30 14:29:09 · 469 阅读 · 0 评论 -
页面置换-先进先出置换(FIFO)
先进先出置换:淘汰最先进入内存的页面输入:内存物理块的大小,以及页面号引用串的大小,引用串的各个页面编号。输出:被置换出去的页面编号。运行结果:所需的数据结构://页面struct Page{ int id; //标志 int start_time; //进入内存的时间 ...原创 2018-09-30 14:16:00 · 518 阅读 · 0 评论 -
页面置换-最佳置换(Optinal)
在进程运行过程中,若其所要访问的页面不在内存,而需把它们调入内存,但内存已无空闲空间时,为了保证该进程正常运行,系统必须从内存中调出一页程序或数据送到磁盘的对换区中,但应将哪个页面调出。需根据一定的算法来确定。最佳置换算法:其所选择的被淘汰页面是以后永不使用的,或者是最长时间内不被访问的页面。输入:内存物理块的大小,以及页面号引用串的大小,引用串的各个页面编号。输出:被置换出去的页面编...原创 2018-09-30 14:10:35 · 413 阅读 · 0 评论 -
避免死锁-银行家算法
死锁的起因,通常源于多个进程对资源的争夺,不仅对不可抢占资源进行争夺时会引起死锁,而且对可消耗资源进行争夺时,也会引起死锁。在一组进程发生死锁的情况下,这组死锁进程中的每一个进程,都在等待另一个死锁进程占有的资源。如果一组进程中的每一个进程都在等待仅由该组进程汇总的其他进程才能引发的事件,那么该组进程是死锁的。最有代表性的避免死锁的算法为银行家算法。银行家算法:每一个新的进程进入系统时...原创 2018-09-29 19:51:49 · 321 阅读 · 0 评论 -
处理机调度-轮转调度算法(RR)
在分时系统中,最简单也是较常用的是基于时间片的轮转调度算法,该算法采取了非常公平的处理机分配方式,即让就绪队列上的每个进程每次仅运行一个时间片。如果就绪队列有n个进程,则每个进程每次大约都可获得1/n的处理机时间。算法思想:让就绪队列的每个进程每次仅运行一个时间片。每隔一段时间产生一次中断,激活系统中的进程调度程序,将cpu分配给队首进程,当时间片耗尽或运行完毕时,再将cpu分配给新的队首进程...原创 2018-09-29 18:23:48 · 4481 阅读 · 0 评论 -
处理机调度-高响应比优先调度(HRRN)
在批处理系统中,FCFS算法所考虑的只是作业的等待时间,而忽视了作业的运行时间。而SJF算法正好与之相反,只考虑作业的运行时间,而忽视了作业的等待时间。高响应比优先调度算法则是即考虑了作业的等待时间,又考虑作业运行时间。我们为每一个作业引入一个动态优先级,优先级随着时间的长而增加,使得长作业的优先级在等待期间不断的增加,等到足够时间后,必然有机会获得处理机。优先级 = (等待时间 + 要求服...原创 2018-09-29 13:23:58 · 5100 阅读 · 1 评论 -
处理机调度-优先级调度(PSA)
优先级调度,按照给定的优先级调度,优先级越高,优先被调度。输入:作业的数目,作业的到达时间与服务时间及其权值.输出:作业的调用序列与其周转时间与结束时间。运行结果:所需数据结构://进程struct Process{ int id; //进程标记 int start_time; ...原创 2018-09-29 13:10:20 · 1902 阅读 · 1 评论 -
处理机调度-短作业优先调度(SJF)
短作业优先调度,作业越短,优先级越高,先被调度。输入:作业的数目,作业的到达时间与服务时间.输出:作业的调用序列与其周转时间与结束时间。运行结果:所需数据结构://进程struct Process{ int id; //进程标记 int start_time; //进入时间...原创 2018-09-29 13:05:14 · 998 阅读 · 0 评论 -
异步编程-异步读取文件
这篇文章我们学习如何用异步编程来读取文件。使用System.IO.Stream类的异步调用方法,对文件out.txt进行异步读操作。运行结果:源代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;usin...原创 2018-12-01 20:36:31 · 2056 阅读 · 0 评论