读书笔记 操作系统

来源:互联网 发布:淘宝网电脑版卖家中心 编辑:程序博客网 时间:2024/05/22 10:58

书名《操作系统》第四版 ;刘振鹏

第二部分 进程

程序的并发执行卓有成效地提高了系统的吞吐量,但也产生了一些与顺序执行不同的特征。

程序执行的间断性;

程序执行失去封闭性;

程序执行结果的不可再现性;

程序和计算不再一一对应。


程序是进程的一次执行。

进程由程序、数据、和进程控制块3部分组成


进程的3种基本状态:就绪;执行;阻塞



linux的自旋。每个进入临界区的进程,都试图把锁从0改为1,要是当前是1,则再次尝试,会在一段循环代码中自旋。对锁的存取一定是原子性的。

linux的信号量,信号量的定义:


count:希望用来保存希望访问次资源的进程个数,正数表示可用。

waking:等待的个数。

wait_queue:等待此资源的队列


临界区,无论是硬件临界资源还是软件临界资源。多个进程必须互斥的他们进行访问。把在每个进程中访问临界资源的那段代码称为临界区


第三章 进程与进程管理

进程的目的使多个程序并发执行以改善资源利用率。引入线程则是为了减少程序并发执行时所付出的时空开销,是操作系统拥有更好的并发性。

线程是进程的一个实体,基本上不拥有资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈)。一个线程可以创建和撤销另一个线程。

线程也有三种基本状态:就绪、阻塞和执行3种基本状态。

1每个线程都有唯一的标识符和一张线程描述表,记录了线程执行的寄存器和栈等现场状态

2不同的线程可以执行相同的程序,即同一个服务程序被不同用户调用时操作系统为他们创建成不同的线程。

3同一进程中的各个线程共享该进程的内存地址空间

4线程是处理机的独立调度单位

5一个线程被创建后便开始了它的生命周期,直至中止。

引入线程的好处
1创建一个新的线程花费时间少,结束也是。不需要另行分配资源。

2线程切换花费少

3同一进程内的线程共享内存和文件,因此不需要额外的通信机制信息传递也更快

4线程能更好的发挥处理与外围设备并行工作的能力


线程的实现机制(不同系统并不相同)


第五章 存储器管理

存储管理是计算机操作系统的一部分,它负责完成逻辑地址到物理地址的转换,对内存进行分配和回收,实现内存的共享和保护,通过软件手段首先对内存容量的扩容。

逻辑地址用户程序编译完的目标代码中出现的地址,一般是相对地址,相对程序首地址

物理地址:内存中各存储单元的编号称为物理地址,也叫绝对地址。

因此程序调度选中某个程序,并装载到内存并为之创建进程,在进程运行之前,必须把该进程指令中的逻辑地址转换成内存中的物理地址,才能得到信息在内存中的真实存放地址,这个过程叫地址转换


内存的分配和回收;

内存的地址保护:因为有很多进程,还有系统进程,不然就会黑客简单攻击了,不过好像,让病毒程序运行了,基本已经歇菜了。

内存的共享:提高内存利用率:1)共享内存资源。在多道程序环境下,多个程序同时装入内存的不同区域,共同占用一个存储器2)共享内存的某些区域:在同一个内存中的若干进程由共同的程序段或数据段时,将这些共同部分放在同一个内存区域,可同时被若干进程访问,节省空间(这是怎么知道的。。

内存的扩容:因为有限,所以系统利用外存对内存进行扩容(其实就是虚拟内存技术)。


将一个用户源程序变为一个可在内存中执行的程序,通常余姚经过一下几个步骤:首先是编译,成若干个目标模块;其次是连接,由连接程序将编译后形成的目标模块以及它们所需要的库函数连接在一起,形成一个装入模块


假如单个模块,没什么好说。否则,则需要利用连接程序将目标模块和他们所需要的库函数连接。根据连接时间的不同,把连接分成3种:

1:静态连接方式。在程序运行之前,就连接成一个完整的装入模块,不再拆开。(解决两问题:1对目标模块中相对地址进行修改。需要把地址更改为相对于装入模块起始地址0的新的相对地址2变换目标模块中外部调用符号)


2:装入时动态链接,用户源程序经过编译后得到的目标模块在装入内存时,边装入边连接,即在装入一个目标模块时,如果发生了外部模块调用事件,将引起装入程序去寻找相应的外部目标模块,并装入内存,同时,需要和上图一样,修改地址。(其优点:便于修改和更新;可以实现共享,对目标模块)

3:运行时动态链接,每次运行调用的模块都不一定相同,推迟到,执行时才进行链接。没有用到的,都不会装入,



将一个装入模块装入到内存,需要进行地址转换。程序的装入可以有绝对装入方式、可重定位装入方式、动态运行时装入方式。

1:绝对装入方式:逻辑地址转换为物理地址的过程发生在程序编译或汇编的时候。程序装入内存的固定位置(还有这种操作?)

2:可重定位装入方式。在重定位装入方式中,比起绝对,肯定好,就是装入的时候,转换一下地址。后面就不变了。

3动态运行时装入方式。推迟到程序真正执行的时候。程序运行过程中,位置可能要经常改变(为啥?)。是靠硬件的地址转换机构来实现的。设置一个重定位寄存器。



以下的概念是在:分页存储管理方式里面

页面(进程的逻辑空间):作业地址空间被划分为若干大小相等的区域,通常512B-4KB之间

块(物理块,内存的空间):将内存存储空间也分为和页大小相等的区域,这些区域被称为块。

页表:为了在内存中找到进程的每个页面所对应的物理块,系统为每个进程建立一个页面映射表。




第六章 虚拟存储器管理

无论是单一连续分配、分区分配还是分页存取管理方式、分段存储管理方式,都有一个共同特点:需要将程序一次性装入内存,如果程序很大,则无法一次性装入。

为了解决这些内存不足的情况,虚拟存储器就是使用虚拟技术从逻辑上对存储器进行补充。

局部性原理

时间局部性:一条指令被执行,他可能很快被执行,因为有很多循环,堆栈这种

空间局部性:CPU总是集中地访问程序中的某一个部分而不是随机地对程序所有部分进行平均访问。


虚拟存储器定义:是指仅把程序的一部分装入内存便可运行程序的存储器系统。具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储器系统。

虚拟存储器并非可以无限大,容量受外存大小,指令地址长度两方面限制。
分页虚拟存储管理:

在分页系统的基础上,增加了请求调页功能和页面置换功能。根据进程需要动态装入其他页面。

主要有:缺页中断机构;

地址变换机构

页面置换算法:如果内存空间已经被装满又要装入新页,则必须按某种算法,淘汰页

最佳置换算法:套他永不使用的,这算法是理想的,无法实现的

先进先出:淘汰最先进入的,最简单,效率不高

最近最久未使用的LRU算法,不宜

简单clock置换算法:最近未使用算法

改进clock算法

为进程分配内存时,将设计3个问题:第一,为了保证进程能正常运行所需的最少物理块数的确定;第二,物理块的分配策略;第三,物理块的分配算法。


这本操作系统真的是草草看了一下,主要是调了几章重点看了看,主要是进程和线程,程序在内存运行的原理

以及部分虚拟内存。给我印象比较深的就是程序的装入原理,他总共分3种装入方式,静态,装入动态,运行动态三种。以及虚拟内存的用途,是解决程序要是太大,一次性根本无法装入(假如前面静态就更大了)于是利用硬盘的空间,制造虚拟内存,主要牵扯到地址变换的算法,以及,内存如何装入硬盘中的虚拟内存的算法,调度怎么调度等。

原创粉丝点击