操作系统笔记09 内存管理
内存管理介绍
进程管理回顾
进程管理提供了一个虚拟的机器接口,让每一个进程都以为是自己在独占CPU,如下图所示:
内存管理的任务:提供一个虚拟的机器接口,让每一个进程都以为是自己在独占RAM。
基本方法 - 以MS-DOS为例
MS-DOS (Microsoft Disk Operating System)
单用户、单任务 只能访问1MB内存:INTEL 8086/80286只有20根地址线
没有任何保护机制:INTEL 8086/80286没有提供硬件保护机制支持
在MS-DOS中, MS-DOS自己要占用1/3左右; 剩余部分留给系统唯一的进程使用。
问题1:如果某个MS-DOS下的应用程序需要超过640K的内存才能运行,怎么办?
**覆盖**:一种允许内存能分配的小于一个进程中所需空间的技术。
基本原理:只保留在任何给定时间需要的指令和数据。程序运行时并非任何时候都要访问程序及数据的各个部分,因此可以把用户空间分成一个固定区和若干个覆盖区。经常活跃的部分放在固定区,其余部分按调用关系分段。在覆盖区和外存(即磁盘)中屡次调入调出。除了程序本身外,程序员还要提 ...
操作系统笔记08 死锁
死锁问题
如果集合中的每个进程正在等待只有集合中的另一个进程可能导致的事件,则会导致一组进程死锁。
Kansas立法机构通过的一个法律:当两列列车在十字路口逼近时,它们要完全停下来,且在一列列车开走之前,另一列列车不能启动。
只有一个方向的交通:桥的每个部分都可以被视为一个资源。如果发生死锁,则可以解决一辆车是否备份(抢占资源并回滚),可能需要“备份几辆汽车。 饥饿是可能的。
#####系统模型
一个系统由有限数量的资源组成,分配给多个竞争过程。
资源被分成几种类型:资源类型R1,R2,…,Rm,例如CPU周期,内存空间和 I/O 设备。
每个资源类型Ri都有Wi实例操作来使用资源
申请:如果不能立即授予请求,则请求进程必须等待直到它获得该资源为止。
使用:进程正在使用该资源。
释放:进程释放资源。
死锁特征
如果以下4个条件同时满足,则会出现死锁:
互斥:至少有一个资源必须处于非共享模式,即一次只有一个进程可以使用该资源。
占有并等待:一个进程必须占有至少一个资源,并等待另一个资源,而该资源为其它资源所占有。
非抢占:资源不能抢占,即资源只能在进程完成任 ...
操作系统笔记07 进程同步
背景
协作进程可以通过内核提供的IPC工具共享一块内存。一个进程中的多个线程可以通过使用全局变量来共享一段内存。
共享数据的并发访问可能会导致数据不一致。 保持数据一致性需要机制来确保协作进程的有序执行。
对生产者和消费者问题的解决方案:允许同时在缓冲区内最多只有(BSIZE - 1)项。
假设我们通过添加一个变量计数器来修改代码。
需要注意的是,可能由于这两个进程并发操作变量counter,而得到不正确的运行结果。
**竞争条件**:多个进程并发地访问和操作同一数据且执行结果与访问发生的特定顺序有关。
为避免竞争条件,需要保证一段时间内只有一个进程能够操作变量。
为了实现这种保证,要求进行一定形式的**进程同步**。
临界区问题
**临界区**:一段访问共享资源的代码。
竞态条件的解决方案必须满足以下4个要求:
相互排斥:任何两个进程不能同时处于临界区。
前进:临界区外运行的进程不能阻塞其他进程尝试进入其临界区,以确定谁能下一个进入临界区。且这种选择不能无限推迟。
有限等待:没有任何一个进程需要无限期等待进入其临界区。
速度:不应该对CPU的速度和数量做任何假设。
...
操作系统笔记06 CPU调度
基本概念
CPU调度是多道程序操作系统的基础。通过在进程之间切换CPU,操作系统可以提高计算机的吞吐率。
在内核级支持线程的操作系统中,是线程被操作系统调度,而不是进程。
调度是操作系统的基本功能。 几乎所有的计算机资源在使用前都要调度。 CPU调度对操作系统设计来说很重要。
CPU- I/O 区间周期
CPU的成功调度依赖于进程的如下属性:
进程执行由CPU执行和 I/O 等待周期组成
进程在这两个状态之间切换。
由CPU区间开始- I/O 区间 -..-最后的CPU区间通过系统请求终止执行。
CPU区间时间曲线图:通常为指数/超指数形式,具有大量短CPU区间和少量长CPU区间。
CPU调度程序
每当CPU空闲时,操作系统就必须从就绪队列中选择一个进程来执行。晋城选择由短期调度程序或CPU调度程序来执行。
CPU调度决策可在如下4种情况下发生:
当一个进程从运行切换到等待状态。
当一个进程从运行状态切换到就绪状态。
当一个进程从等待切换到就绪状态。
当一个进程终止。
当调度只能发生1和4两种情况下,称调度方案是非抢占的/协作的,否则,称调度方案是抢占的。
...
操作系统笔记05 线程管理
进程与线程
传统意义上,一个进程只有一个控制线程。在这种情况下进程是①资源分配单位和②调度单位。
将上述两个概念分开并允许单个进程包括多个控制线程,得到线程。也就是说,进程用于将资源组合在一起,线程是派发(调度)在CPU上执行的实体。
线程是现代操作系统中CPU使用的基本单位。也称为轻量级过程(LWP)。
多线程
在同一个进程中允许多个线程。
进程是资源分配的单位,线程是调度的单位。
共享属于同一进程的资源,例如是代码段,数据段,打开的文件和信号等。
一个进程中的每个线程都有一个私有线程上下文(包括CPU寄存器集和其他状态信息:?函数参数,变量,返回地址etc)和一个私有堆栈。
进程:①地址空间 ②全局变量 ③打开的文件 ④子进程 ⑤未决(pending)警报 ⑥信号和信号处理程序 ⑦计数信息
线程:①程序计数器 ②寄存器 ③堆 ④状态
多线程编程优点
响应度高:即使一个或多个线程被阻塞或正在执行冗长的操作,允许其他线程继续响应用户。
资源共享:由于同一进程内的线程共享内存和资源,它们可以在不调用内核的情况下相互通信。它能允许一个应用进程在同一地址空间有多个不同的活动进 ...
操作系统笔记04 进程管理
进程概念
流程批处理系统出现之前:工作
多程序或分时:程序或任务
进程:正在运行的作业/程序/任务的抽象
**进程**是执行中的程序,形成所有计算机的基础。
一个过程不仅仅是一个程序。它包括
文本段:可执行的机器代码 /程序代码
数据段:包括全局变量
当前活动:通过程序计数器的值和处理器寄存器的内容表示
堆栈段:包含临时数据,如函数参数,返回地址和局部变量
(如果需要的话)堆:进程运行期间动态地分配内存
许多其他资源,如打开的文件等
程序只是被动实体,如存储在磁盘上包含一系列指令的文件内容(可执行文件)
进程时活动实体,它有一个程序计数器用来表示一个要执行的命令和相关资源的合集。
多个进程可能运行同一程序。尽管它们共享相同的文本段,但它们被当作两个独立的执行程序,数据段、堆、堆栈段不同。
进程状态
当一个进程执行时,它会改变状态。过程的状态由其当前活动定义。
每个进程可能处于以下状态之一:
新建:进程正在被创建。
运行:指令正在被执行。
等待:进程正在等待某个事件发生(如 I/O 完成或收到信号)。
就绪:进程等待分配处理器。
终止:进程完成执行。
随着进 ...
操作系统笔记03 操作系统结构
一个像现代操作系统一样庞大而复杂的系统必须仔细设计,才能正常运行并易于修改。
一种常用的方法是将任务分成小部件,而不是一个单一的系统。
这些组件中的每一个都应该是系统的一个明确定义的部分,具有详细定义的输入,输出和功能。
系统设计人员如何组织这些组件?
简单结构(或没有结构)
分层结构
微内核
虚拟机
简单结构
许多系统没有明确的结构。
他们从小、简单和有限的系统开始,然后演变成复杂的系统。
eg. MS-DOS和Unix
分层结构
操作系统分解成多个层,高层只能调用低一层的功能。
分层结构的主要难点在于:
仔细定义每一层
效率较低。
eg. The THE operating system by Dijkstra.
微内核
随着Unix操作系统的扩展,内核变得庞大而难以管理。
微内核方法通过从内核中删除所有非必要组件并将它们实现为系统级和用户级程序来构造操作系统。
提供精简的内核。哪些组件应该保留在微内核中?
CPU管理
内存管理
通信设备
eg. ①卡内基梅隆大学的开源Mach(用作Apple Mac OS X和DEC Tru64 Unix的内核) ②QNX Inc ...
操作系统笔记02 计算机系统结构
Bootstrap 引导
我们必须将操作系统内核从某些永久性存储(如磁盘和网络服务器)加载到内存中。装入内核以启动计算机的过程称为引导系统。
绝大多数计算机系统都有一小块代码,称为引导程序/引导装载程序。这段代码能定位内核,将它装入内存,开始执行。
引导加载程序不是操作系统的一部分。引导程序被存储在固件中,而操作系统保存在磁盘上。
例子:
NTLDR: 用于Windows NT / XP的boot-loader(驻留在C:\)。
GRUB: Unix / Linux的启动加载器之一。
中断
现代计算机和操作系统是由中断驱动的。
外围设备使用**中断信号通知CPU发生了某些事情。
当CPU发生中断时,它必须通过硬件、ISR中的汇编语言程序和C程序来服务中断:
硬件:将一些寄存器和分支保存到**中断服务程序(ISR**);
ISR中的汇编语言程序:必要时保存其余寄存器营造便利的环境;
ISR中的C语言程序:确实服务于中断,通常读取并缓冲来自外围设备的输入数据;
ISR中的C语言程序:返回在ISR中的汇编语言;
ISR中的汇编语言程序:恢复保存的寄存器并返回到被中断的位置。
中 ...
操作系统笔记01 导论
操作系统结构
多个作业同时保存在主存储器中,CPU通过在作业之间切换来执行多个作业。
台式机的操作系统
这些计算机的操作系统从主机操作系统的开发中受益良多。
Microsoft MS-DOS, Windows 9x/NT
Apple Macintosh, Mac OS X
IBM OS/2
Unix: Solaris by Sun microsystem, HP-UX by Hewlett-Packard, AIX by IBM, Free (as in freedom) software such as BSD (Berkeley Software Distribution) Unix, GNU/Linux
(实时)嵌入式系统
嵌入式计算机通常用作工业控制系统等专用应用中的控制设备。通常他们资源有限:
处理器缓慢、内存有限
小甚至没有显示屏幕、有限的电源
有限的功能,只具有很少甚至没有用户接口
嵌入式系统几乎都运行实时操作系统。
他们资源有限:处理器缓慢、内存有限、小甚至没有显示屏幕、有限的电源 etc..
Microsoft Windows CE (Consumer ...
软件工程导论笔记
1. 软件工程概述软件的概念和特点软件(广义):计算机系统中与硬件相互依存的一部分
程序:计算机可以接受的一系列指令,运行时可以提供所要求的功能和性能。数据:使得程序能够适当地操作信息的数据结构。文档:描述程序的研制过程、方法和使用的图文资料。
软件所具有的复杂性、一致性、可变性、不可见性等特性,使得软件开发过程变得难以控制。
软件的特点:
软件是一种逻辑实体,不是具体的物理实体。
软件产品的生产主要是研制。
软件具有“复杂性”,其开发和运行常受到计算机系统的限制。
软件成本昂贵,其开发方式目前尚未完全摆脱手工生产方式。
软件不存在磨损和老化问题,但存在退化问题。
软件危机
软件危机:落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
体现在:
软件产品无质量保证,可靠性差,甚至开发过程就夭折。
软件生产率太低
无法开发复杂程度高的软件
成本和进度估计不准
无统一科学的规范,软件不可维护
软件常不能满足用户的需求
解决途径:
管理措施:项目管理、配置管理、过程管理、质量控制
技术措施 ...