无标题文章

现代操作系统的功能

提供抽象
提供标准接口
调度资源使用
消费资源

死锁的必要条件

互斥:同一时间只有一个线程可以占有锁
占有并等待:至少一个线程占有着锁并等待其他线程解锁
非抢占:只有占有锁的线程可以解锁
循环等待:t1在等t2,t2在等t3,…,tn在等t1

进程的三种状态

运行(running):进程正在CPU运行
就绪(ready):准备好运行但还未在CPU运行
等待(waiting):等待一些事件比如I/O发生

当进程执行I/O操作时,进入等待状态

Much of operating system history driven by relative cost factors of hardware and people. Hardware started out fantastically expensive relative to people and the relative cost has been decreasing ever since. Relative costs drive the goals of the
operating system.
■ In the beginning: Expensive Hardware, Cheap
People Goal: maximize hardware utilization.
■ Now: Cheap Hardware, Expensive People Goal:
make it easy for people to use computer.

驱动操作系统发展的因素

操作系统的发展取决于人和硬件的相对价值。起初硬件成本显著高于人,后来硬件成本不断下降。这种相对价值决定了操作系统的目标。
起初:硬件成本高人力成本低,操作系统目标:最大化硬件的使用
现在:硬件成本低人力成本高,操作系统目标:让人更加方便地使用计算机

现代操作系统在进程管理提供的三种抽象

进程,虚拟内存,文件系统,同步和通信机制

多道程序设计(multiprogramming)

同一时间有多个进程。

操作系统通过上下文切换实现进程的抽象

上下文切换

终止一个进程,开始(或重启)另一个进程

上下文切换的实现

上下文切换时保存和恢复硬件状态。状态保存在进程控制块(PCB)中。

原子操作

Typically build complex atomic operations up out of sequences of primitive operations. In our case the primitive operations are the individual machine instructions.
原子操作是执行时不受其他任何操作干扰的操作。总而言之,他作为一个整体执行
原子操作执行时不会被线程调度机制打断。
如果一些原子操作按相同的序列执行,最终结果保证是相同的

什么是信号量(semaphore)

信号量是同步的第一步抽象,概念上,指一个支持P和V两个原子操作的计数器
P原子地等待直到计数器大于0,然后减小计数器并返回
V原子地增加计数器
对应到线程,一个线程释放(release)时,将信号量加一。
当信号量<=0时,线程等待。
当信号量>0时,线程通过,将信号量减一。

临界区(critical section)

每个线程中访问临界资源的那段代码,不论是硬件临界资源,还是软件临界资源,多个线程必须互斥地对它进行访问。

进程:进程

线程:线程是相应线程状态下的执行流。

进程和线程的区别

线程是相应线程状态下的执行流。线程和进程间的关键区别在于多线程可以共享他们的部分状态。通常,允许多线程在相同的内存上读取、写入(一个进程不可访问另一个进程的内存)。每一个线程也有它自己的寄存器、栈,但是其他线程也可在该线程栈所在的内存上读取和写入。

多线程程序出错

当并发执行时,结果取决于指令是如何交织的,这导致结果是不确定的
所以有可能产生错误,且再现bug是很困难的
为确保正确,必须使一些指令原子化,即当执行这些指令时阻止指令的交织

CPU调度

抢占调度

在抢占模式下,操作系统负责分配CPU时间给各个进程,一旦当前的进程使用完分配给自己的CPU时间,操作系统将决定下一个占用CPU时间的是哪一个线程。因此操作系统将定期的中断当前正在执行的线程,将CPU分配给在等待队列的下一个线程。

非抢占调度

在非抢占的调度模式下,每个线程可以需要CPU多少时间就占用CPU多少时间。

短作业优先调度

进程 到达时间 CPU突发时间
P1 0 8
P2 1 6
P3 2 4
P4 3 6
抢占调度

执行顺序
P1,P2,P3(4),P2(5),P4(6),P1(7),
P1等了16,P2等了4,P3等了0,P4等了8
平均等待时间(Average Waiting Time, AWT)为28/4

非抢占调度

执行顺序
P1(8),P3(4),P2(6),P4(6)
P1等了0,P2等了11,P3等了6,P4等了15
平均等待时间(Average Waiting Time, AWT)为8

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,177评论 0 23
  • 1.要做一个尽可能流畅的ListView,你平时在工作中如何进行优化的? ①Item布局,层级越少越好,使用hie...
    fozero阅读 766评论 0 0
  • Java Thread 总结 【显示目录】 Ø线程的概述(Introduction) 线程是一个程序的多个执行路径...
    夏6阅读 365评论 0 0
  • 园林芳草相隔, 古道深巷楼接。 二十八年未曾别。 满天星河来阅。 阳春三月虫绝, 春寒冰冽鸟歇。 偶尔周末暖阳泽。...
    XXKY阅读 290评论 2 12
  • 有的时候,真的觉得你挺傻的。为什么总是在意一些不好的东西,不去多让自己快乐一点呢。 你宁愿没心没肺,至少可...
    可可爱可乐阅读 370评论 0 1