操作系统笔记

操作系统定义

操作系统组成:shellGUI Kernel(内部)

并发,共享,虚拟,异步

1.OS启动,中断,设备管理

2.物理内存管理

3.虚拟内存管理

4.内核线程管理

5.用户进程管理

6.进程调度

7.同步互斥

8.文件系统


 

为什么需要中断,异常和系统调用

在计算机运行中,内核是被信任的第三方;只有内核可以执行特权指令,方便应用程序;

系统调用:应用程序主动向操作系统发出的服务请求

异常:非法指令或者其他原因导致指令执行失败

中断:来自硬件设备的处理请求

 

 

 

中断嵌套

不同硬件中断源可能硬件中断处理时出现

硬件中断服务例程中需要临时禁止中断请求

中断请求会保持到CPU做出响应

异常服务例程可被打断

异常服务例程执行时可能出现缺页

系统调用:INTIRET,系统调用时,堆栈切换和特权级的转换

函数调用:CALLRET,常规调用时没有堆栈切换

段机制

中断处理 中断服务例程ISR(Interrupt Service Routine) GDT全局描述符表

http://blog.csdn.net/zat111/article/details/36420903

 

 

 

 

 

内存最小访问单位一个字节8位 MMU把逻辑地址空间转成物理地址空间

内存管理:抽象(逻辑地址空间),保护(独立地址空间),共享(访问相同地址)

虚拟化(更大的地址空间)

管理方式:重定位(relocation)分段(segmentation)分页(paging)虚拟存储

地址空间和地址生成

地址空间:起始地址0到MAX

编译时,假设起始地址已知,如果起始地址改变,必须重新编译

加载时,如编译时起始位置未知,编译时需产生可重定位的代码

执行时,执行时代码可移动,需地址转换硬件支持

ALU:需要地址的内存内容

MMU:进行逻辑地址和物理地址的转换

CPU控制逻辑:给总线发送物理地址请求

连续内存分配

内存碎片:

动态分配:当程序被加载执行时,分配一个进程指定大小可变的分区,分区的地址是连续的;分配策略:最先,最佳,最差

最先:空闲分区列表按地址顺序排序,分配过程时,搜索第一个合适的分区,释放分区时,检查是否可以与临近的空闲分区合并,简单,在高地址空间有大块的空闲分区

最差:空闲分区列表按由大到小排序,分配时,选最大的分区,释放时,检查是否可与邻居空闲分区合并,进行可能的合并,并调整空闲分区列表顺序,中等大学的分配较多时,效果最好,避免出现太多的小碎片,释放分区较慢,外部碎片,容易破坏大的空闲分区,因此后续难以分配大的分区

非连续分配:提高利用效率和管理灵活性

段地址空间:主代码段,子模块代码段,公用库代码段,堆栈段,堆数据,初始化数据段,符号表

段表示访问方式和存储数据等属性相同的一段地址空间

页帧frame把物理地址空间划分为大小相同的基本分配单位

页面,页面到页帧

物理:内存物理地址的表示二元组(帧号,帧内偏移)

逻辑:页内偏移=帧内偏移通常:页号大小!=帧号大小 二元组(页号,页内偏移)

页到帧的映射,逻辑地址的页号连续,物理地址帧号不连续不是所有的页都有对应的帧

页表保存了逻辑地址—物理地址之间的映射关系

页式存储管理:访问一个内存单元需要2次内存访问,第一次访问获取页表项,第二次访问访问数据,页表会很大

页表树

反置页表,大地址空间系统,多级页表变得繁琐

逻辑地址空间增长速度快于物理地址空间,页寄存器和反置页面的思路:不让页表与逻辑地址空间大小相对应,让页表与物理地址空间的大小相对应

页寄存器:使用位:此帧是否被进程占用,占用页号,保护位

优点:页表大小相对于物理内存很小。页表大小与逻辑地址空间大小无关

缺点:页表信息对调后需要依据帧号可找页号,页寄存器中搜索逻辑地址的页号

 

用快表缓存页表项后的页寄存器搜索步骤

对逻辑地址进行hash变换,在快表中查找对应页表项,有冲突时遍历冲突项链表,查找失败时产生异常,快表容量限制,功耗限制

段页式存储管理

 

 

 

进程特点

动态性,并发性,独立性,制约性

进程是操作系统处于执行状态程序的抽象

进程控制块PCB

进程标识信息,处理机线程保存,进程控制信息

进程生命周期:创建,执行,等待,抢占,唤醒,结束

状态队列

线程是进程的一部分,描述指令流执行状态,它是进程中指令执行流的最小单位,CPU调度的基本单位。

进程的资源分配角色:进程由一组相关资源构成,包括地址空间(代码段,数据段)

线程的处理机调度角色:线程描述在进程资源环境中的指令流执行状态

线程=进程-共享资源

一个线程崩溃,会导致其所属进程的所有线程崩溃

用户线程的特征

1.不依赖于操作系统的内核

内核不理解用户线程的存在,可以用于不支持线程的多进程操作系统

2.在用户空间实现的线程机制

每个进程有私有的线程控制块TCB,TCB由线程库函数维护

3.同一进程内的用户线程

无需用户态/核心态切换

内核线程

进程由内核通过系统调用实现的线程机制,由内核完成线程的创建

1.内核维护PCB和TCB

2.线程执行系统调用而被阻塞不影响其他线程

 

 

进程切换(上下文切换)

1.暂停当前运行进程,从运行状态变成其他状态

2.调度另一个进程从就绪变成运行

切换前,保存进程上下文,切换后,恢复,寄存器,CPU状态,内存地址空间

 

处理机调度

用信号量实现条件同步

管程:是一种用于多线程互斥访问共享资源的程序结构

1.采用面向对象方法,简化了线程间的同步控制

2.任一时刻最多只有一个线程执行执行管程代码

3.正在管程中的线程可临时放弃管程的互斥访问,等待事件出现时恢复

条件变量是管程内的等待机制

进入管程的线程因资源被占用而进入等待状态

每个条件变量表示一种等待原因,对应一个等待队列

Wait()操作:将自己阻塞在等待队列中,唤醒一个等待者或释放管程的互斥访问

Signal()操作:将等待队列中的一个线程唤醒,如果等待队列为空,相当于空操作

 

 

内存管理有哪几种方式

常见的内存管理方式有块式管理、页式管理、段式和段页式管理。

1)块式管理:把主存分为一大块一大块的,当所需的程序片段不在主存时就分配一块主存空间,把程序片段load入主存

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值