操作系统

操作系统是管理计算机硬件和软件资源的计算机程序
为什么需要操作系统:我们不可能直接操作计算机硬件,需要同一界面
进程:
就绪状态:其他资源已准备好,只差CPU分配资源
执行状态:获得CPU资源,立即执行
阻塞状态:执行过程中,其他设备未就绪无法继续执行,放弃CPU的状态
创建状态:创建但资源并未准备就绪
终止状态:执行完成
进程同步:
临界资源指的是一些虽作为共享资源却又无法同时被多个线程共同访问的共享资源.当有进程在使用临界资源时,其他进程必须依据操作系统的同步机制等待占用进程释放该共享资源才可重新竞争使用共享资源
**为什么需要进程间同步:**进程间如果不同步,可能使用的资源不一致,会出现变动,且没有协调,可能出现同时抢占资源的情况
Linux进程同步的方法:
消息队列
共享存储
信号量
进程的类型:
前台进程:占用了终端的就是前台进程,运行时其他进程无法占用终端
后台进程:没有占用终端的进程,优先级比前台进程低,运行时其他进程还可以占用终端
守护进程:系统启动到结束都在
进程算法:
先来先服务调度算法
短进程优先调度算法
高优先权优先调度算法
时间片轮转调度算法
**死锁:**死锁是指两个或以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,他们都将无法推进下午.此时称系统处于死锁状态,这些永远相互等待的进程称为死锁进程
死锁的产生:
资源不足,导致进程同时使用一个资源
进程调度顺序不当
死锁的四个必要条件:
互斥条件:某个资源只允许一个进程同时使用
请求保持条件:某个进程保持着一个资源,又提出新的资源请求,新资源正好被占用,请求被阻塞,还不释放自己保持的资源
不可剥夺条件:进程获得的资源在未完成使用前不能被剥夺
环路等待条件:发生死锁时,必然存在进程-资源环形链(你堵我,我堵你)

存储管理之内存分配与回收

内存分配:
固定分区:将内存分成若干个分区,每个分区由一个进程单独使用,互不干扰
动态分区: 根据进程实际需要,动态分配内存

动态分配算法

首次适应算法:
分配时内存从开始顺序查找适应内存区
最佳适应算法:
要求空闲区链表按照容量大小排序(从小到大遍历,避免大材小用)
表里空闲区链表找到最佳合适空闲区
快速适应算法:
要求有多个空闲区链表
每个空闲区链表储存一种容量的空闲区

内存回收

存储管理之段页式存储管理

段页式存储管理(当进程的管理空间需要物理地址时,根据所需要的长短划分若干段,在若干段中分成等分的若干页):
先将逻辑空间按段式管理分成若干段
再把段内空间按页式管理分成若干页

虚拟内存

为什么需要虚拟内存?
有些进程实际需要的内存很大,超过物理内存的容量(比如一个游戏可能有十几G内存,而物理内存只有4G,怎么运行?)
多道程序设计,使得每个进程可用物理内存更加稀缺
不可能无线增加物理内存,物理内存总有不够用的时候
虚拟内存的作用:
可以将暂时不需要使用的内存放置到磁盘,需要使用的放到物理内存使用
程序的局部性原理:
如上述将需要的放入主存,暂时不需要的放入辅存(磁盘).当需要的访问不在主存时,则发出缺页中断,发起页面置换
虚拟内存的置换算法:
先进先出算法
最不经常使用算法
最近最少使用算法
替换策略发生在Cache-主存层次或者主存-辅存层次
Cache-主存层次为了解决速度问题
主存-辅存层次为了解决容量问题

Linux的存储管理

buddy内存管理算法:
内存分配:
向上取整为2的幂次方大小:例如 70K的内存向上取整为128K的内存分配 129K向上取整为256K的内存大小
自旋锁与互斥量:
原子性:指一系列的操作不可被中断,要么全部执行完成,要么全部没有执行
线程同步的互斥量保证线程的原子性
操作系统提供互斥量的API(pthread_mutex_t)
自旋锁和互斥量原理一样,但是自旋锁不会让出cpu,而是以一种死循环的方式等待锁被释放,避免了进程或线程上下文切换的开销,不适合在单核cpu中使用.
读写锁:
对于像历史订单这样的可以使用读写锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值