概论-1

操作系统:提高资源利用率(保持cpu,io忙碌),提高吞吐量,方便性,可扩充性(新增功能和模块),开放性(网络)
用户与硬件的接口,资源管理者,资源抽象(比如无需对物理硬件了解,提供抽象接口),多层抽象(如linux:驱动-文件系统-vfs)
单道 多道批处理(多进程,主动放弃cpu) 分时 实时
单用户多任务windows 多用户多任务unix/linux
并发(时间间隔)/并行(同时)进程资源分配 线程独立运行和调度
共享:互斥和可同时访问 虚拟:(时分复用)处理器/设备,(空分复用)内存/磁盘
异步:进程不可预知的速度向前推进
1 处理机管理:
进程控制(创建,撤销),进程同步(互斥/锁, 协作进程执行次序协调),进程通信,调度(作业调度:后备队列选哪个创建进程/ 进程调度)
2 存储器管理:
内存分配(静态/动态:运行中可申请内存和在内存中移动),可分配和回收和记录使用情况,内存保护(不可访问其他进程的内存),地址映射,内存扩充(请求调入:运行所需数据还在磁盘,调入内存,置换:内存满了,换点出去,再调入)
3 设备管理:
内存中缓冲区解决速度矛盾,设备分配(为进程分配设备,为设备分配控制器和通道),设备处理(驱动程序:实现cpu和控制器的通信,驱动接受cpu的请求,控制设备控制器完成操作,控制器发出中断,最后由中断处理程序(驱动)处理)
4 文件管理:
文件系统:存储空间和目录管理,读写保护
5 接口:
用户接口(命令,脚本,界面) 程序接口(系统调用)

阻塞block/wakeup(不满足运行条件 ) 阻塞/就绪
挂起suspend/active(操作系统要记账,负载太重,父进程想挂起,用户想挂起) 静止/活动
pcb(进程控制块),linux里就是task_struct.
pcb: pid,处理机状态(寄存器,pc,程序状态字psw,用户栈指针),状态,优先级,内存信息,资源清单
栈指针:栈会扩张,栈指针指向栈顶,现在扩张的位置。
原语(原子操作),(正常,异常,受外界干扰)结束
信号量,管程(数据和过程绑定在一起)
进程通信:共享内存,管道(一个读,一个写进程),消息(直接,间接:消息放信箱)
线程:内核支持线程,用户级线程(调度不用进入内核空间),混合方式

高级(作业)调度:从外存后备队列选择哪个创建进程。(批处理系统)
低级(进程)调度:各种系统都有,非抢占式(等进程主动让cpu,基本不用),抢占式(优先级,时间片,短进程)
可以有多个阻塞队列(不同阻塞原因)
中级调度:阻塞进程能否放入外存。
一般我们常用的分时系统可能只有进程调度。
考虑点:周转时间(批处理,算上在外存上等待时间),响应时间(分时),截止时间(实时),优先级能否保证。吞吐量,cpu利用率,资源的平衡利用
考虑实现:fifo,短而优先,优先级(静态,还是动态,如vruntime就是linux决定哪个获取cpu的最终动态优先级),时间片轮转,多就绪队列(第一队列运行一次,没运行完进入第二队列,如此往下,优先调度第一队列,运行越久实际的优先级越低)
死锁:竞争资源,请求和释放资源顺序不当,必要条件:互斥,请求和保持,不剥夺,环路等待
预防,避免,检测,解除
破坏三个条件中至少一个以预防
请求和保持:一次性申请所有资源
不剥夺:可剥夺
环路等待:资源请求按某种顺序
安全状态:看看某次分配是否会导致系统进入不安全状态,不安全状态有可能最终导致死锁。
检测:资源分配图,像innodb的wait-for graph
解除:撤销进程或剥夺资源

源程序存放在外存,编译,链接(编译后多个模块加库函数拼在一起),装入后放入内存。
绝对装入:程序中放的是物理地址。
可重定位装入:程序中放的是相对地址(0开始),看装入在哪里在装入时修改成绝对物理地址
动态运行时装入:为支持程序在内存中移动,程序中放的是相对地址,运行时转换为绝对地址。
链接:静态(拼好再装入),装入时动态(边拼边放),运行时动态(运行时还可以拼放)
内存分配:连续或离散
连续分配:单一连续(系统区,用户区),固定分区(各区大小可相同可不同,但大小固定),动态分区(分区大小在装入时才确定,装入9mb,找到10mb的原始空闲分区,划分成9mb和1mb两个分区)
离散分配:
分页,页表(内存中),快表(寄存器,缓存部分页表项),多级页表(占用内存太大,页表太长,如linux三级页表)
分段,(段号+段内地址),段表(段号-段内基址),段内基址+段内地址=物理地址
分页是系统管理的需要,是硬件或者说系统分的,分段是编译程序给你分的,段大小不固定。
段页式:段号,段内页号,页内地址。
请求分页=基本分页+调入换出:页表增加标记是否在内存中和外存地址,缺页中断(软中断,异常)
请求分段=基本分段+调入换出:段表增加字段,缺段中断。
linux:表面看上去分段但实际不分段,所有段的段内基址都为0,段大小都为4G,给出的32位地址没有段号,32地址=段内地址=线性地址,线性地址再页表转物理地址。代码段不是从0开始,从0x08048000开始,或者说代码中给出的逻辑地址就是线性地址。
在这里插入图片描述

下面三段都是固定大小的,写一段代码,就存在一些指令,和一些确定的已初始化的变量和确定的未初始化的变量
上面三段都是动态扩展的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值