1、操作系统的四大特性:
- 并发性(进程并发)、虚拟性(虚拟内存 空分复用技术、虚拟处理器 时分复用技术)、异步性、共享性(共享设备、文件)
2、顺序执行的程序的特征:顺序性、封闭性、可再现性
2、并发性:
- 并发:指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的。
3、程序并发执行提高了系统的吞吐量和资源利用率
4、并发程序的特性:
- 间断性(因为并发执行程序之间一般都存在相互制约的关系)
- 失去封闭性
- 不可再现性(因为失去了封闭性,资源很难在现)
1、 Java 虚拟机的多线程是通过线程轮流获得处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。
- 资源共享方式:互斥共享、同时共享(两个进程访问硬盘)
- 时分复用技术:将一个时间片分为多个小的时间片,分配给不同的任务;处理机为有时间片的任务调用
- 异步是指,在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
- 线程中的同步和异步的区别
-
指令:特权指令∶如内存清零指令;非特权指令︰如普通的运算指令

-
内核就是操作系统
-
用户态的程序调用系统服务时,会发生一次中断(切换):将用户态的程序进行现场保护,根据用户态调用的系统服务,去内核中执行对应的程序
-
用户态的进程之间也会发生切换
-
中断: 打断CPU的执行
-
还有IO中断(鼠标、键盘,,,)
-
内核程序可以调用所有内存中的资源,但是用户程序只能访问自己当前已有的内存空间的资源
-
CPU在执行用户程序时,当读到涉及系统调用的函数时,中断用户程序当前的执行,CPU转而执行该函数在内核中对应的命令,执行结束再返回用户程序继续执行(用户态、内核态的切换)
-
用户程序调用IO是会发生系统中断的:IO操作属于系统调用,CPU需要从用户态切换到内核态,执行完再切换回来
-
BIO:每一个连接,占用一个线程
-
线程是系统进程通过clone()方法创建出来的
-
BIO模式:每一个连接,占用一个线程;cpu单位时间内,每一个线程轮询一下(用户态切换,耗时)
-
BIO会发生阻塞,导致要创建很多线程,使资源的切换次数增加
-
BIO中:创建服务端后,在其accept()函数处会阻塞,只有当有客户端连接进来时,才会往下执行;而在服务端读取客户端数据时,如果客户端没有向服务端发送数据,也会发生阻塞,一直等在那
-
在NIO中:将客户端和服务器端设置为非阻塞状态,只用一个主线程,在服务器端的accept()方法等待客户端连接时,不用阻塞,当有客户端连接时,就返回客户端,否则返回null,在读取客户端数据时,也不会发生阻塞,当有数据是就返回数据,否则返回null
-
优点:非阻塞,一个线程完成任务
-
弊端:当客户端连接多了以后,遍历会很麻烦(假设有1万个人年进来了,但是只有一个人发送了数据,但是为了读到这个数据,要遍历一万个人)
-
同步IO:需要程序和内核自己读取数据;反之为异步IO(AIO),Windows的iocp用的是AIO
-
异步IO:程序启动时,向内核暴露一个存储空间,内核有数据是就像存储空间放入;当程序需要数据时,直接向那片存储空间读取就行了,不涉及到系统调用
- 异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。
- 同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而产生的制约关系。进程间的直接制约关系就是源于它们之间的相互合作。
- 进程互斥:访问临界资源



- 发生死锁的条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
- 进程访问临界资源的原则:
1.空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区;
2.忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待;
3.有限等待。对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿);
4.让权等待。当进程不能进入临界区时,应立即释放处理机,
防止进程忙等待。

-
单标志发:一个进程在访问完临界区后会把使用临界区的权限转交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进程赋予
Peterson算法用软件方法解决了进程互斥问题,遵循了空闲让进、忙则等待、有限等待三个原则,但是依然未遵循让权等待的原则(忙等:循环等待)。




-
以上所有的解决方案都无法实现“让权等待’
网友评论