
Operating Systems
binbigdata
这个作者很懒,什么都没留下…
展开
-
进程
1.进程-它被简单地看作是一个正在运行的程序。操作系统如何使程序运转起来?首先操作系统需要把磁盘中的程序加载到内存中,并且初始化堆栈,启动main()函数。2.进程的几种状态: 1.运行,等待,堵塞等...原创 2018-03-16 20:24:26 · 188 阅读 · 0 评论 -
内存API
在这段插曲中,我们讨论了UNIX系统中的内存分配接口。所提供的接口相当简单,因此本章是简短的。我们要解决的主要问题是这个。关键:如何分配和管理内存。在UNIX/C程序中,理解如何分配和管理内存对于构建健壮可靠的软件至关重要。常用的接口是什么?应该避免哪些错误!14.1类型的内存在运行C程序时,分配了两种类型的内存。第一个被称为堆栈内存,它的分配和分配是由编译器为您(程序员)隐式管理的。出于这个原因...翻译 2018-03-26 09:55:17 · 1412 阅读 · 0 评论 -
VAX/VMS虚拟内存系统
案例研究:在我们结束对虚拟内存的研究之前,让我们更仔细地研究一下在VAX/VMS操作系统中发现的一个特别干净和出色的虚拟内存管理器。在本文中,我们将讨论这个系统,以说明在一个完整的内存管理器中,前面章节中提出的一些概念。23.1背景VAX-11微型计算机体系结构是由数字设备公司(DEC)在1970年代末引入的。DEC在微型计算机时代是计算机行业的一个巨大的参与者;不幸的是,一系列糟糕的决定和个人电...翻译 2018-04-08 16:51:50 · 4450 阅读 · 3 评论 -
机制:地址转换-重定位技术
在开发CPU虚拟化时,我们关注的是一种称为有限直接执行(LDE)的通用机制。LDE背后的想法很简单:在大多数情况下,让程序直接运行在硬件上;但是,在某些关键时刻(例如当一个进程发出一个系统调用,或者发生一个计时器中断)时,要安排操作系统参与,并确保正确的事情发生。因此,使用少量硬件支持的操作系统,尽最大努力摆脱运行程序的方式,实现高效的虚拟化;然而,通过在关键时刻插入,操作系统确保了它对硬件的控制...翻译 2018-03-26 17:33:19 · 1963 阅读 · 1 评论 -
并发性:介绍
到目前为止,我们已经看到了基本抽象的发展。 操作系统执行。我们已经看到了如何使用单个物理CPU和转换。 它进入多个虚拟cpu,从而使多个程序同时运行的幻象得以实现。我们也看到了如何创建。 对每个进程的大型私有虚拟内存的错觉;这个地址空间的抽象使每个程序能够表现得好像它有它一样。 自己的内存时,实际上操作系统是秘密的多路复用地址空间。 跨物理内存(有时,磁盘)。在本文中,我们为单个运行过程引入了一个...翻译 2018-04-09 10:43:19 · 1187 阅读 · 0 评论 -
Interlude: Thread API-线程API
本章简要介绍了线程API的主要部分。在接下来的章节中,我们将进一步解释每个部分,说明如何使用API。更多的细节可以在各种书籍和在线资料中找到[B89, B97, B+96, K+96]。我们应该注意到,后面的章节更慢地介绍了锁和条件变量的概念,有很多例子;因此,本章更好地作为参考。如何创建和控制线程?操作系统应该为线程创建和控制提供哪些接口?这些接口应该如何设计,以方便使用和实用?27.1创建线程...翻译 2018-04-10 10:36:07 · 258 阅读 · 0 评论 -
内核锁
从介绍并发性,我们看到在并发编程的一个基本问题:我们想要自动执行一系列指令,但由于中断的存在在一个处理器(或多个线程上执行多个处理器同时),我们就t。在这一章,我们因此直接攻击这一问题,通过引入一些称为锁。程序员用锁注释源代码,把它们放在关键的部分,从而确保任何这样的关键部分执行起来就像它是一个单一的原子指令一样。28.1锁:基本思想。作为一个例子,假设我们的关键部分是这样的,一个共享变量的规范更...翻译 2018-04-10 11:37:44 · 339 阅读 · 0 评论 -
分割
到目前为止,我们已经将每个进程的整个地址空间放在内存中。使用基础和边界寄存器,操作系统可以轻松地将进程重新定位到物理内存的不同部分。但是,您可能已经注意到我们的这些地址空间有一些有趣的地方:中间有一大块空闲空间,在堆栈和堆之间。如图16.1所示,虽然堆栈和堆之间的空间并没有被进程使用,但是当我们将整个地址空间重新定位到物理内存的某个地方时,它仍然占用了物理内存;因此,使用基础和边界寄存器对来虚...翻译 2018-03-28 16:31:31 · 590 阅读 · 0 评论 -
自由空间管理
在本章中,我们将从讨论虚拟化内存的过程中进行一个小的讨论,以讨论任何内存管理系统的一个基本方面,无论是malloc库(管理一个进程堆的页面)还是操作系统本身(处理进程的地址空间的部分)。具体来说,我们将讨论自由空间管理的问题。让我们把问题讲得更具体些。管理空闲空间当然很容易,因为我们将在讨论分页的概念时看到。当你管理的空间被划分为固定大小的单元时,这是很容易的;在这种情况下,您只需保留这些固定大小...翻译 2018-03-28 17:32:19 · 1173 阅读 · 0 评论 -
操作系统学习总结
OperatingSystems: Three Easy PiecesRemzi H. Arpaci-Dusseau和Andrea C. Arpaci-Dusseau这本书主要从虚拟化、并发、持久化三个方面进行对计算机操作系统的讲解。1.进程-它被简单地看作是一个正在运行的程序。进程的几种状态:运行,等待,堵塞。进程的创建:通过调用进程API系统调用fork()/exec()/wait()来创建进...原创 2018-05-01 14:10:49 · 666 阅读 · 0 评论 -
基于锁的并发数据结构
在超越锁之前,我们将首先描述如何在一些公共数据结构中使用锁。将锁添加到数据结构以使其可用,这使得结构线程安全。当然,这样的锁究竟是如何添加的,决定了数据结构的正确性和性能。因此,我们面临的挑战。当然,我们将很难涵盖所有的数据结构或所有增加并发性的方法,因为这是一个已经研究了多年的主题,(实际上)已经发表了数千篇研究论文。因此,我们希望能提供一种充分的介绍,让您了解所需的思维类型,并向您推荐一些好的...翻译 2018-05-01 15:05:42 · 610 阅读 · 0 评论 -
超出物理内存:政策
虚拟内存管理器中,当您拥有大量空闲内存时,生活很简单。出现页面错误时,您会在空闲页面列表中找到一个空闲页面,并将其分配给错误页面。嘿,操作系统,恭喜你!你又做了一次。不幸的是,当小内存是免费的时候,事情变得更有趣了。在这种情况下,这种内存压力迫使操作系统开始分页,为使用活动的页面腾出空间。决定将哪些页面(或页面)驱逐出去,封装在操作系统的替换策略中;从历史上看,这是早期虚拟内存系统所做的最重要的决...翻译 2018-04-08 14:26:54 · 696 阅读 · 0 评论 -
分页:更快转换--(TLBs)
使用分页作为支持虚拟内存的核心机制可以导致高性能的开销。把地址空间切成小的、固定大小的单位(即:分页需要大量的映射信息。因为映射信息通常存储在物理内存中,因此,在逻辑上需要对程序生成的每个虚拟地址进行额外的内存查找。在每次指令取出或显式加载或存储之前都要对翻译信息进行记忆,这是非常缓慢的。因此我们的问题。症结如何加快地址转换?我们如何加快地址转换,并且通常避免分页所需要的额外内存引用?需要什么硬件...翻译 2018-03-30 21:49:50 · 1567 阅读 · 1 评论 -
超出物理内存:机制
到目前为止,我们假定地址空间是不实际的小的,并且适合于物理内存。事实上,我们一直假设每个运行过程的每个地址空间都适合内存。现在,我们将放松这些大的假设,并假设我们希望支持许多并发运行的大型地址空间。为此,我们需要在内存层次结构中增加一个级别。到目前为止,我们假定所有页面都驻留在物理内存中。但是,为了支持大的地址空间,操作系统需要一个地方来存储当前不太需要的地址空间的部分。一般来说,这样一个位置的特...翻译 2018-04-07 21:43:38 · 684 阅读 · 0 评论 -
系统调用
5穿插章节:进程API前言:该穿插章节将更多的介绍有关系统的实际运用,特别针对于操作系统API,以及如何运用它们。如果你不喜欢实践的东西,你可以跳过这个章节。但是,你最好应该关注一下实践,因为在实际生活中经常用到它们;毕竟,如果你没有实践技能,用人公司一般是不会录用你的。 在这个章,我们讨论Unix系统中的进程创建。Unix有种十分有趣的新建进程的方法,系统调用fork()和exec()。还有wa...翻译 2018-03-17 10:37:37 · 253 阅读 · 0 评论 -
系统调用wait()
5.2系统调用wait()迄今为止,我们还没做多少工作,只是创建了一个子进程打印了点信息就退出了。事实说明,有时候让父进程去等待子进程结束是十分有用的。这项工作就是由wait()函数完成的(或者由waitpid()函数完成)详见figure5.2。在程序p2.c中,父进程通过调用wait()函数来延迟自身的执行直至子进程执行完成。当子进程完成,wait()函数就返回到父进程中。在上面的程序中加入w...翻译 2018-03-17 10:47:47 · 2363 阅读 · 0 评论 -
Operating Systems翻译-有限的直接执行。
为了虚拟化CPU,操作系统需要以某种方式共享物理CPU,在许多工作中同时运行。基本的想法很简单:运行一个进程一段时间,然后运行另一个进程,等等。通过这种方式共享CPU,实现了虚拟化。然而,在构建这样的虚拟化机制方面存在一些挑战,然而,在构建这样的虚拟化机制方面存在一些挑战。第二个是控制:如何有效地运行流程,同时保留对CPU的控制。控制对操作系统尤其重要,因为它负责资源;如果没有控...翻译 2018-03-17 20:26:12 · 338 阅读 · 0 评论 -
实现进程的切换
1.直接执行的下一个问题是在进程之间实现切换 直接执行的下一个问题是在进程之间实现切换。在进程之间切换应该很简单,对吗?操作系统应该决定停止一个进程,启动另一个进程。有什么大不了的?但是它实际上有点棘手:具体来说,如果一个进程在CPU上运行,那么根据定义,这意味着操作系统不会运行。如果操作系统没有运行,它怎么能做任何事情呢?(提示:它不能)虽然这听起来很有哲理,但这是一个真正的问题:...翻译 2018-03-17 21:38:26 · 2318 阅读 · 0 评论 -
operating systems
CPU调度: 到目前为止,运行进程的低级机制(例如,上下文切换)应该是清楚的。如果他们不是,那就回一两章,看看这些东西是如何工作的。然而,我们还没有理解OS调度器使用的高级策略。我们现在要做的就是,提出一系列的计划政策(有时被称为学科),那些聪明和勤奋的人多年来一直在发展。调度的起源,事实上,是先于计算机系统的;早期的方法取自于操作管理领域,并应用于计算机。这一事实并不令人惊讶:装配线和许多其他...翻译 2018-03-18 11:16:14 · 360 阅读 · 0 评论 -
多级反馈队列
多级反馈队列 在这一章中,我们将讨论开发其中一个最重要的问题。 众所周知的调度方法,称为多级反馈队列(MLFQ)。多级反馈队列(MLFQ)调度程序最初由Corbato等人描述,在1962年[C+62]系统中被称为兼容分时系统(CTSS),这一工作,以及后来的Multics工作,导致ACM授予Corbato最高荣誉-图灵奖。在接下来的几年里,调度器一直被细化到您将在一些现代系统中遇到的实现。MLF...翻译 2018-03-23 21:24:05 · 13891 阅读 · 2 评论 -
调度:比例分享
在本章中,我们将研究一种不同类型的调度器,称为比例共享调度器,有时也称为公平共享调度器。比例共享是基于一个简单的概念:调度程序可能会试图确保每个作业获得一定百分比的CPU时间,而不是优化转换或响应时间。在Waldspurger和Weihl [WW94]的研究中发现了一个非常好的比例共享计划的现代例子,它被称为彩票调度。然而,这个想法肯定要大得多[KL88]。基本的想法很简单:每隔一段时间,拿一张彩...翻译 2018-03-24 10:36:12 · 1931 阅读 · 0 评论 -
抽象:地址空间
在早期,建立计算机系统很容易。为什么,你问?因为用户没有期望太多。正是这些用户对使用的易用性、高性能、可靠性等的期望,导致了所有这些头痛。下次你遇到这样的电脑用户时,感谢他们给你带来的所有问题。从内存的角度来看,早期的机器并没有为用户提供太多的抽象。基本上,机器的物理内存看起来像图13.1所示。操作系统是一组例程(一个图书馆,真的),坐在记忆(在这个例子中从物理地址0),会有一个运行的程序(过程)...翻译 2018-03-24 17:07:18 · 540 阅读 · 0 评论 -
分页:介绍
有时会说,在解决大多数空间管理问题时,操作系统采用两种方法中的一种。第一种方法是把东西分割成可变大小的块,正如我们在虚拟内存中看到的那样。不幸的是,这种解决方案存在固有的困难。特别是,当将空间划分为不同大小的块时,空间本身可能会变得支离破碎,因此随着时间的推移,分配将变得更具挑战性。考虑第二种方法可能是值得的:把空间切成固定大小的块。在虚拟内存中,我们把这个想法称为分页,它返回到一个早期和重要的系...翻译 2018-03-30 18:48:30 · 381 阅读 · 0 评论 -
分页:小表
现在我们解决了分页引入的第二个问题:页表太大,从而消耗了太多内存。让我们从一个线性的页表开始。正如你所看到的,线性页表变得非常大。再假设一个32位地址空间(2^32字节),有4KB(2^12字节)页和一个4字节的页表条目。因此,地址空间大致是这样的。 其中1百万虚拟页(2 ^32/2^12),乘以页表条目的大小,您可以看到我们的页表大小为4MB。还记得:我们通常在系统中的每个进程都有一个页表。有上...翻译 2018-04-07 18:35:44 · 363 阅读 · 0 评论 -
操作系统内存管理——分区、页式、段式管理
https://blog.youkuaiyun.com/hguisu/article/details/5713164转载 2019-03-18 23:32:38 · 276 阅读 · 0 评论