博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
操作系统学习笔记
阅读量:5337 次
发布时间:2019-06-15

本文共 1738 字,大约阅读时间需要 5 分钟。

1、操作系统的认识:

  操作系统就是为“用户提供操作逻辑所有软硬件资源的工具,相当于用户与裸机进行交互的界面”。再次层面上,为了节约有限资源,操作系统的目的提升到了“充分、合理地利用计算机系统的所有软硬件资源,最大限度地让用户使用有限的硬件资源完成更多的事情”。

2、进程、程序、并发、资源共享、互斥、同步、异步、阻塞和非阻塞:

  进程和程序:进程是程序的依次动态执行,程序是进程的静态文本。进程的生命周期是短暂的,随着创建、执行、睡眠到最后销毁结束,而程序则可以永久的存储在设备商。一个进程可以执行不同的程序,一个程序也可以由多个不同的进程执行。

  并发:在操作系统中同时存在并行处理的多个进程。对于并发,需要考虑任务的切换或调度(调度的时机或进程下台条件、上台进程选择、调度的实际操作)、保护不同进程不会彼此影响(进程互斥)、不同进程之间的相互协调(进程同步)、不同进程之间的消息传递(进程通信)。

  资源共享:由于系统中存在并发处理的进程,但是系统的软硬件资源(CPU、存储设备等)是有限的,所以存在多个进程同时使用一份资源。对于资源共享,需要考虑资源的分配、多个进程同时对一份资源请求、资源回收和资源保护等。

  互斥:多个进程同时竞争只允许给一个进程使用的资源,就会产生互斥,而该资源称为临界资源。解决互斥的方法有锁、开关中断、开关中断+锁和信号量(P、V操作)。

  同步:一个进程的继续执行,依赖于另一个进程的结果输出或者执行状态,就会产生进程同步,这是如果该进程需要的数据或者信号没有出现,处理器就会停下等待。

  异步:对于一个进程需要的资源没有准备好,处理器将该进程暂时睡眠,然后处理其他进程,当该进程需要的资源准备完毕,处理器再将该进程唤醒,这种就是进程异步。

  一般有同步阻塞、异步轮询、一部非阻塞。

3、信号量和P、V操作

  信号量是一种结构体:

1 struct{2     int value;3     Queue task;4 } sem;

  对于value:当value>0时,表示临界区资源的剩余量;当value<0时,|value|表示队列task中因等待该临界资源而挂起的进程数。

  P操作:

1 Process P(sem s){2      s.value --;3      if(s.value < 0){4           sleep();//将该进程放到s.task中          5     }6 }

  V操作:

1 Process V(sem s){2     s.value ++;3     if(s.value <= 0){4         wakeup();//从s.task队列中唤醒一个进程5     }6 }

  无论何种情况,在一个完整的系统中,P、V操作总是成对出现。

  对于互斥:每个临界资源对应一个信号量s,进程在访问临界区前,对s执行P操作,在离开临界区时,对s执行V操作,如下:

      进程a            进程b

      ……            ……

      P(s)            P(s)

      临界区s          临界区s

      V(s)           V(s)

  对于同步,假设进程a需要进程b的输出结果result,该result对应信号量r,当进程a需要result时,对r执行P操作,当进程b产生result时,对r执行V操作。

      进程a            进程b

      ……            ……

      P(r)            产生result

      操作result          V(r)

4、银行家算法:避免死锁

算法思想:在进程请求资源之前

1、实际资源检测:

  Request < Need

  Request < Available

2、假分配检测:

  假设进行分配,预测是否会产生死锁。

银行家算法更详细介绍见

 

转载于:https://www.cnblogs.com/DwyaneTalk/p/3580529.html

你可能感兴趣的文章
4,7周围玩家
查看>>
关于webpack升级过后不能打包的问题;
查看>>
vue - 生命周期
查看>>
Python正则表达式
查看>>
Linux进程间通信--命名管道
查看>>
UVa 10970 - Big Chocolate
查看>>
js输出
查看>>
H5多文本换行
查看>>
HAL层三类函数及其作用
查看>>
Odoo 去掉 恼人的 "上午"和"下午"
查看>>
web@h,c小总结
查看>>
java编程思想笔记(一)——面向对象导论
查看>>
Data Structure 基本概念
查看>>
Ubuntu改坏sudoers后无法使用sudo的解决办法
查看>>
NEYC 2017 游记
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
Python之旅Day14 JQuery部分
查看>>
core--线程池
查看>>
redux-effect
查看>>
Swift和OC混编
查看>>