操作系统
文章平均质量分 88
boat_7
世人皆被命运安排,而我安排命运
展开
-
操作系统之保护模式
* 问题1:为什么会有保护模式**实模式下操作系统和用户程序属于同一特权级用户程序所引用的地址都是指向真实的物理地址用户程序可以自由修改段基址,可以访问所有内存以上三个原因属于安全缺陷访问超过64KB的内存区域时要切换段基址一次只能运行一个程序,无法充分利用计算机资源共20条地址线,最大可用内存为1MB为了克服这种恶劣的内存管理方式,处理器厂商开发出保护模式,这样,物理内存地址不能直接被程序访问,程序内部的地址(虚拟地址)需要被转化为物理地址后再去访问。原创 2022-10-25 15:47:10 · 1079 阅读 · 1 评论 -
操作系统实现——编写MBR
由于MBR是占据了硬盘的第0扇区(以逻辑LBA方式,扇区从0开始编号,若是以物理CHS方式,扇区则从1开始编号),第一扇区是空闲的,可以用,但离得太近了,所以把loader放到第2扇区,MBR从第2扇区中把它读出来,读出来放到哪?第一条指令中的源操作数0x18是立即数,目的操作数ax是寄存器,所以它既是立即数寻址,也是寄存器寻址,第二条指令中,源操作数和目的操作数都是寄存器,所以纯粹是寄存器寻址。0x1234是段偏移地址,默认的段地址是DS,这条指令是将内存地址DS:0x1234处的值写入ax寄存器。原创 2022-10-15 14:51:55 · 1338 阅读 · 0 评论 -
分页系统中的设计问题
分页系统中的设计问题局部分配策略与全局分配策略负载控制页面大小分离的指令空间和数据空间共享页面共享库内存映射文件清除策略虚拟内存接口我们将讨论为了使分页系统达到较好的性能,操作系统设计者必须仔细考虑的一些其他问题局部分配策略与全局分配策略怎样在相互竞争的可运行进程之间分配内存如图a所示,三个进程A、B、C构成了可运行进程的集合。假如A发生了缺页中断,页面置换算法在寻找最近最少使用的页面时是只考虑分配给A的6个页面呢?还是考虑所有在内存中的页面?如果只考虑分配给A的页面,生存时间值最小的页面是A5,原创 2021-09-11 19:28:38 · 412 阅读 · 0 评论 -
页面置换算法
页面置换算法最优页面置换算法最近未使用页面置换算法先进先出页面置换算法第二次机会页面置换算法时钟页面置换算法最近最少使用页面置换算法用软件模拟LRU工作集页面置换算法工作集时钟页面置换算法总结最优页面置换算法该算法是这样工作的:在缺页中断发生时,有些页面在内存中,其中有一个页面(包含紧接着的下一条指令的那个页面)将很快被访问,其他页面则可能要到10、100或1000条指令后才会被访问,每个页面都可以用在该页面首次被访问前所要执行的指令数作为标记这个算法惟一的问题就是它是无法实现的。当缺页中断发生时,操原创 2021-09-09 17:58:05 · 834 阅读 · 0 评论 -
深入理解虚拟内存
虚拟内存虚拟内存的产生虚拟地址的实现分页MMU的实现页表加速分页的过程转换检测缓冲区虚拟内存的产生尽管基址寄存器和界限寄存器可以用于创建地址空间的抽象,还有另一个问题需要解决:管理软件的膨胀(bloatware)需要运行的程序往往大到内存无法容纳,而且必然需要系统能够支持多个程序同时运行,即使内存可以满足其中单独一个程序的需要,但总体来看,它们仍然超出了内存大小。交换技术 (swapping)并不是一个有吸引力的解决方案,因为一个典型的SATA磁盘的峰值传输率最高达到 100MB/s,这意味着至少需要原创 2021-09-07 20:37:18 · 272 阅读 · 0 评论 -
存储器抽象:地址空间
地址空间地址空间概念基址寄存器与界限寄存器交换技术空闲内存管理使用位图的存储管理使用链表的存储管理地址空间概念要保证多个应用程序同时处于内存中并且不互相影响,则需要解决两个问题:保护和重定位,我们来看 一个原始的对前者的解决办法,它曾被用在IBM 360上:给内存块标记上一个保护键,并且比较执行进程的键和其访问的每个内存字的保护键。然而,这种方法本身并没有解决后一个问题,虽然这个问题可以通过在程序被装载时重定位程序来解决,但这是一个缓慢且复杂的解决方法一个更好的办法是创造一个新的内存抽象:地址空间。就原创 2021-08-31 20:15:18 · 813 阅读 · 0 评论 -
经典的IPC问题
经典的IPC问题哲学家就餐问题读者-写者问题哲学家就餐问题如图所示:哲学家有两种交替状态:吃饭和思考,当一个哲学家觉得饿了时,他就试图分两次去取其左边和右边的叉子,每次拿一把,但不分次序。如果成功地得到了两把叉子,就开始吃饭,吃完后放下叉子继续思考。关键问题是:能为每一个哲学家写一段描述其行为的程序,且决不会死锁吗?如图所示,给出了一种直观的解法,过程take_fork将一直等到所指定的叉子可用,然后将其取用。不过,这 种显然的解法是错误的。如果五位哲学家同时拿起左面的叉子,就没有人能够拿到他们原创 2021-08-30 16:43:24 · 833 阅读 · 0 评论 -
不同系统的调度算法
不同系统的调度算法批处理系统中的调度先来先服务最短作业优先最短剩余时间优先交互式系统中的调度轮转调度优先级调度多级队列最短进程优先保证调度彩票调度公平分享调度实时系统中的调度批处理系统中的调度先来先服务在所有调度算法中,最简单的是非抢占式的先来先服务(first-come first-severd)算法。使用该算法,进程按照它们请求CPU的顺序使用CPU。基本上,有一个就绪进程的单一队列。早上,当第一个作业从外部进入系统,就立即开始并允许运行它所期望的时间。不会中断该作业,因为它需要很长的时间运行。当原创 2021-08-29 16:19:46 · 794 阅读 · 0 评论 -
消息传递和屏蔽
消息传递和屏蔽消息传递消息传递系统的设计要点用消息传递解决生产者-消费者问题屏障消息传递消息传递系统的设计要点消息传递系统面临着许多信号量和管程所未涉及的问题和设计难点,特别是位于网络中不同机器上的通信进程的情况。例如,消息有可能被网络丢失。为了防止消息丢失,发送方和接收方可以达成如下一致:一旦接收到信息,接收方马上回送一条特殊的确认(acknowledgement)消息。如果发送方在一段时间间隔内未收到确认,则重发消息现在考虑消息本身被正确接收,而返回给发送者的确认信息丢失的情况。发送者将重发信息原创 2021-08-28 16:54:04 · 181 阅读 · 0 评论 -
深入理解互斥量
互斥量互斥量Pthread中的互斥互斥量如果不需要信号量的计数能力,有时可以使用信号量的一个简化版本,称为互斥量(mutex)。互斥量仅仅适用于管理共享资源或一小段代码。由于互斥量在实现时既容易又有效,这使得互斥量在实现用户空间线程包时非常有用互斥量是一个可以处于两态之一的变量:解锁和加锁。这样,只需要一个二进制位表示它,不过实际上,常常使用一个整型量,0表示解锁,而其他所有的值则表示加锁。互斥量使用两个过程。当一个线程 (或进程)需要访问临界区时,它调用mutex_lock。如果该互斥量当前是解锁的原创 2021-08-16 14:48:50 · 3087 阅读 · 0 评论 -
深入理解信号量
信号量信号量用信号量解决生产者-消费者问题信号量信号量是E.W.Dijkstra在1965年提出的一种方法,它使用一个整型变量来累计唤醒次数,供以后使用。 在他的建议中引入了一个新的变量类型,称作信号量(semaphore)。一个信号量的取值可以为0(表示没有保存下来的唤醒操作)或者为正值(表示有一个或多个唤醒操作)Dijkstra建议设立两种操作:down和up(分别为一般化后的sleep和wakeup)。对一信号量执行down操 作,则是检查其值是否大于0。若该值大于0,则将其值减1(即用掉一个保转载 2021-08-15 15:02:16 · 1025 阅读 · 0 评论 -
实现互斥的几种方案
实现互斥的方案忙等待的互斥屏蔽中断锁变量严格轮换法Peterson解法TSL指令睡眠与唤醒生产者-消费者问题忙等待的互斥屏蔽中断在单处理器系统中,最简单的方法是使每个进程在刚刚进入临界区后立即屏蔽所有中断,并在就要离开之前再打开中断。屏蔽中断后,时钟中断也被屏蔽。CPU只有发生时钟中断或其他中断时才会进行进程切换,这样,在屏蔽中断之后CPU将不会被切换到其他进程。于是,一旦某个进程屏蔽中断之后,它就可以检查和修改共享内存,而不必担心其他进程介入这个方案并不好,因为把屏蔽中断的权力交给用户进程是不明智原创 2021-08-13 20:09:57 · 3419 阅读 · 0 评论 -
竞争条件和临界区
竞争条件和临界区竞争条件临界区竞争条件在一些操作系统中,协作的进程可能共享一些彼此都能读写的公用存储区。这个公用存储区可能在内存中(可能是在内核数据结构中),也可能是一个共享文件。这里共享存储区的位置并不影响通信的本质及其带来的问题。为了理解实际中进程间通信如何工作,我们考虑一个简单但很普遍的例子:一个假脱机打印程序。当一个进程需要打印一个文件时,它将文件名放在一个特殊的假脱机目录(spooler directory)下。另一个进程(打印机守护进程)则周期性地检查是否有文件需要打印,若有就打印并将该文件原创 2021-08-12 16:52:29 · 409 阅读 · 0 评论 -
弹出式线程
弹出式线程在分布式系统中经常使用线程。一个有意义的例子是如何处理到来的消息,例如服务请求。传统的方法是将进程或线程阻塞在一个receive系统调用上,等待消息到来。当消息到达时,该系统调用接收消息,并打开消息检查其内容,然后进行处理不过,也可能有另一种完全不同的处理方式,在该处理方式中,一个消息的到达导致系统创建一个处理 该消息的线程,这种线程称为弹出式线程如图所示:好处:由于这种线程相当新,没有历史——没有必须存储的寄存器、堆栈诸如此类的内容,每个线程从全新开始,每一个线程彼此之 间都完全一原创 2021-08-11 14:24:57 · 235 阅读 · 0 评论 -
调度程序激活机制
调度程序激活机制调度程序激活机制调度程序激活机制尽管内核级线程在一些关键点上优于用户级线程,但无可争议的是内核级线程的速度慢。因此,研究人 员一直在寻找在保持其优良特性的前提下改进其速度的方法。下面我们将介绍Anderson等人(1992)设计的这样一种方法,称为调度程序激活(scheduler activation)机制调度程序激活工作的目标是模拟内核线程的功能,但是为线程包提供通常在用户空间中才能实现的更好的性能和更大的灵活性。特别地,如果用户线程从事某种系统调用时是安全的,那就不应该进行专门的非原创 2021-08-11 14:15:16 · 506 阅读 · 0 评论 -
线程的实现
线程的实现POSIX线程在用户空间中实现线程在内核中实现线程混合实现POSIX线程为实现可移植的线程程序,IEEE在IEEE标准1003.1c中定义了线程的标准。它定义的线程包叫做 Pthread。大部分UNIX系统都支持该标准。这个标准定义了超过60个函数调用,如果在这里列举一遍就太多 了。取而代之的是,我们将仅仅描述一些主要的函数,以说明它是如何工作的。图中列举了这些函数调用在用户空间中实现线程有两种主要的方法实现线程包:在用户空间中和在内核中第一种方法是把整个线程包放在用户空间中,内核对线原创 2021-08-10 14:46:39 · 161 阅读 · 0 评论 -
深入了解I/O设备
I/O设备CPU和存储器不是操作系统惟一需要管理的资源。I/O设备也与操作系统有密切的相互影响I/O设备一般包括两个部分:设备控制器和设备本身。控制器是插在电路板上的一块芯片或一组芯片, 这块电路板物理地控制设备。它从操作系统接收命令,例如,从设备读数据,并且完成数据的处理在许多情形下,对这些设备的控制是非常复杂和具体的,所以,控制器的任务是为操作系统提供一个简 单的接口(不过还是很复杂的)。例如,磁盘控制器可以接受一个命令从磁盘2读出11206号扇区,然后,控 制器把这个线性扇区号转化为柱面、扇区和原创 2021-08-09 20:09:40 · 201 阅读 · 0 评论 -
深入了解存储器
存储器存储器的结构寄存器高速缓存缓存主存磁盘磁带存储器的结构在理想情形下,存储器应该极为迅速(快于执行一 条指令,这样CPU不会受到存储器的限制),充分大,并且非常便宜。但是目前的技术无法同时满足这三个 目标,于是出现了不同的处理方式。存储器系统采用一种分层次的结构寄存器存储器系统的顶层是CPU中的寄存器。它们用与CPU相同的材料制成,所以和CPU一样快。显然,访问它们是没有时延的。其典型的存储容量是,在32位CPU中为32×32位,而在64位CPU中为64×64位。在这两种情形下,其存储容量都小原创 2021-08-08 13:20:38 · 459 阅读 · 0 评论 -
处理器介绍
处理器计算机的“大脑”是CPU,它从内存中取出指令并执行之。在每个CPU基本周期中,首先从内存中取出指 令,解码以确定其类型和操作数,接着执行之,然后取指、解码并执行下一条指令。按照这一方式,程序被 执行完成每个CPU都有其一套可执行的专门指令集。所以,Pentium不能执行SPARC程序,而SPARC也不能执行 Pentium程序。由于用来访问内存以得到指令或数据的时间要比执行指令花费的时间长得多,因此,所有的 CPU内都有一些用来保存关键变量和临时数据的寄存器。这样,通常在指令集中提供一些指令,用以原创 2021-08-06 16:02:45 · 343 阅读 · 0 评论 -
经典线程模型
线程模型线程模型线程模型进程模型基于两种独立的概念:资源分组处理与执行。有时,将这两种概念分开会更有益,这也引入了“线程”这一概念。我们将先来看经典的线程模型:理解进程的一个角度是,用某种方法把相关的资源集中在一起。进程有存放程序正文和数据以及其他资 源的地址空间。这些资源中包括打开的文件、子进程、即将发生的报警、信号处理程序、账号信息等。把它 们都放到进程中可以更容易管理另一个概念是,进程拥有一个执行的线程,通常简写为线程(thread)。在线程中有一个程序计数器, 用来记录接着要执行哪一条指令。原创 2021-08-05 14:41:01 · 498 阅读 · 0 评论 -
为什么要有线程
线程产生的原因线程的优点线程的优点人们需要多线程的主要原因是,在许多应用中同时发生着多种活动。其 中某些活动随着时间的推移会被阻塞。通过将这些应用程序分解成可以准并行运行的多个顺序线程,程序设 计模型会变得更简单。有了多线程概念之后,我们 才加入了一种新的元素:并行实体共享同一个地址空间和所有可用数据的能力。对于某些应用而言,这种能 力是必需的,而这正是多进程模型(它们具有不同地址空间)所无法表达的由于线程比进程更轻量级,所以它们比进程更容易(即更快)创建, 也更容易撤销。在许多系统中,创建一个线原创 2021-08-03 22:17:09 · 1810 阅读 · 1 评论 -
深入理解进程
进程为什么会产生进程概念进程模型进程和程序间的区别创建进程进程的终止进程的层次结构进程的状态进程的实现为什么会产生进程概念所有现代的计算机经常会在同一时间做许多件事,在任何多道程序设计系统中,CPU由一个进程快速切换至另一个进程,使每个进程各运行几十或几百个 毫秒。严格地说,在某一个瞬间,CPU只能运行一个进程。但在1秒钟期间,它可能运行多个进程,这样就 产生并行的错觉。有时人们所说的伪并行就是指这种情形,以此来区分多处理器系统(该系统有两个或多个 CPU共享同一个物理内存)的真正硬件并行。人们很难对多原创 2021-08-02 16:53:15 · 188 阅读 · 0 评论