赞
踩
操作系统:
并发:指宏观上看起来两个程序在同时运行,比如说在单核CPU上的多任务。但是从微观上看两个程序的指令是交织着运行的,指令之间交错执行,在单个周期只运行一次。这方法不能提高计算机的性能,只能提高效率。
并行:指严格物理意义上的同时运行,比如多核CPU,两个程序分别运行在两个核上,两者之间互不影响,单个周期内每个程序都运行了自己的指令,也就是运行了两个指令。这样提高了计算机的性能。
什么是进程?
进程是操作系统中比较重要的抽象概念之一,是资源分配的基本单位,是独立运行的基本单位。
进程的定义是一个执行中程序的实例。三部分组成:进程控制块PCB,程序段,数据段。
操作进程:1:创建fork()
2:回收子进程()
3、加载并运行程序
4、进程终止
进程之间的通讯:管道、系统IPC(包括消息队列、信号量、信号、共享内容等)、以及套接字socket.
孤儿进程:父进程退出了,子进程还在运行。
僵尸进程:进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait获waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保持在系统中的这些进程是僵尸进程。
什么是线程?
1、是进程划分的任务,是一个进程内可调度的实体,是CPU调度的基本单位,用于保证程序的实时性,实现进程内部的并发。
2、线程是操作系统可识别的最小执行和调度单位。每个线程都单独占用一个虚拟处理器:独自的寄存器组,指令计数器和处理器状态。
3、每个线程完成不同的任务,但是属于同一个进程的不同线程之间共享同一地址空间,打开的文件队列和其他内核资源。
为什么需要线程?
线程产生的原因:进程可以使多个程序能并发执行,以提高资源的利用率和系统的吞吐量;但是其具有一些缺点:
1、进程在同一时刻只能做一个任务,很多时候不能充分利用CPU资源。
2、进程在执行的过程中如果发生阻塞,整个进程就会被挂起,即使进程中其他任务不依赖于等待的资源,进程仍会被阻塞。
引入线程就是为了解决以上进程的不足,线程具有以下的优点:
1、从资源上讲,开辟一个线程所需要的资源要远小于一个进程。
2、从切换效率上来讲,线程切换速度更快,比起进程。
3、从通信机制上来讲,线程间方便的通信机制。对不同进程来说,它们具有独立的地址空间,要进行数据的传递只能通过进程间通信的方式进行。线程则不然,属于同一个进程的不同线程之间共享同一地址空间,所以一个线程的数据可以被其他线程感知,线程之间可以直接读写数据段(如全局变量)来进行通信(需要一些同步措施)。
1、线程与进程的区别:一个线程只能属于一个进程,而同一个进程可以有多个线程,但至少有一个线程。
2、进程在执行过程中拥有独立的地址空间,而多个线程共享进程的地址空间。
3、进程是资源分配的最小单位,线程是CPU调度的最小单位。
4、通信:由于同一进程中的多个线程具有相同的地址空间,使它们之间的同步和通信的实现,也变得比较容易。进程间通信IPC,线程间可以直接读写进程段(如全局变量)来进行通信(需要一些同步方法,以保证数据的一致性)。
5、进程编程调试简单可靠性高,但是创建销毁开销大;线程正相反,开销小,切换速度快,但是编程调试相对负杂。
6、进程间不会相互;一个进程内某个线程挂掉将导致整个进程挂掉。
7、进程适合于多核、多机分布;线程适用于多核。
多线程模型:
1、多对一模型:将多个用户级线程映射到一个内核级线程。该模型下,线程在用户空间进行管理,效率较高。
2、一对一模型:将内核线程与用户线程一一对应。优点是一个小城阻塞时,不会影响到其他线程的执行。该模型具有更好的并发性。缺点是内核线程数量有上线,会限制用户线程的数量。更多的内核线程数也给线程切换带来了额外的负担。linux和windows操作系统家族都是使用一对一模型。
3、多对多模型。将多个用户级线程映射到多个内核级线程上。结合了多对一模型和一对一模型的特点。
进程同步的方法:就是等哪个资源有空,然后去进行进程同步
1、互斥锁
2、读写锁
3、条件变量
4、记录锁
5、信号量
6、屏障
线程同步的方法:
操作系统中,属于同一进程的线程具有相同的地址空间,线程之间共享数据变得简单高效。遇到竞争的线程同时修改同一数据或是写作的线程设置同步点的问题,需要使用一些线程同步的方法来解决这些问题。
与进程同步方法类似。
进程同步与线程同步的difference?
进程之间的地址空间不同,不能感知对方的存在,同步时需要将锁放在多进程共享的空间。而线程之间共享同一地址空间即可。
死锁是怎么产生的?
死锁是指两个或两个以上进程在执行过程中,因争夺资源而造成的下相互等待的现象。产生死锁需要满足下面四个条件。
1、互斥条件:进程对所分配到的资源不允许其他进程访问,若其他进程访问该资源,只能等待,直至占有该资源的进程使用完成后释放资源。
2、占有并等待条件:进程获得一定的资源后,又对其他资源发出请求,但是该资源可能被其他进程占有,此事请求阻塞,但该进程不会释放自己已经占有的资源。
3、非抢占条件:进程已获得资源,在未完成使用之前,不可被剥夺,只能在使用后自己释放。
4、循环等待条件:进程发送死锁后,必然存在一个进程-资源之间的环形链。
如何解决死锁问题?
解决死锁方法就是破坏产生的条件。主要方法:
1、资源一次性分配,这样就不会有请求了(破坏请求条件)
2、只要有一个资源得不到分配,也不给这个进程分配其他资源(破坏占有并等待条件)。
3、可抢占式资源:即当进程新的资源未得到满足时,释放已占有的资源,从而破坏不可抢占的条件
4、资源有序分配法:系统给每类资源赋予一个序号,每个进程按编号递增的请求资源,释放则相反,从而破坏环路等待的条件。
Linux内核 与windows内核
Windows和linux可以是我们比较常见的两款操作系统。
Windows基本占领了电脑时代的市场,商业上取得了很大的成就,但是它并不开源。
对于服务器操作的操作系统基本都是linux,而且内核源码也是开源的,任何人都可以下载,并增加自己的改动或功能,linux最大的魅力在于,全世界有非常多的技术大佬为它贡献代码
What is 内核?计算机由各种外部硬件设备组成,比如内存、cpu、硬盘等,如果每个应用都要和这些硬件设备对接通讯协议,那样太累了,所以这个中间人就由内核来负责,让内核作为应用连接硬件设备的桥梁,应用程序只需关系与内核交互,不用关心硬件的细节。
内核有哪些能力?
现代操作系统,内核一般会提供4个基本能力:
管理进程、线程,决定哪个进程、线程使用CPU,也就是进程调度的能力;
管理内存,决定内存的分配和回收,也就是内存管理的能力;
管理硬件设备,为进程与硬件设备之间提供通信能力,也就是硬件通信能力;
提供系统调用,如果应用程序要运行更高权限运行的服务,那么就需要有系统调用,它是用户程序与操作系统之间的接口。
内核是怎么工作的?
内核具有很高的权限,可以控制cpu、内存、硬盘等硬件,而应用程序具有权限很小,因此大多数操作系统,把内存分为两个区域:
内核空间,这个内存空间只有内核程序才能访问;
用户空间,这个内存空间专门给应用程序使用;
用户空间的代码只能访问一个局部的内存空间,而内核空间的代码可以访问所有内存空间。因此,当程序使用用户空间时,我们常说程序在用户态执行,而当程序使内核空间时候,程序则在内核态执行。
应用程序如果需要进入内核空间,就需要通过系统调用,下面来看看系统调用的过程:
内核程序执行在内核态,用户程序执行在用户态。当应用程序使用系统调用时,会产生一个中断。发生中断后,CPU会中断当前在执行的用户程序,转而跳转到中断处理程序,也就是开始执行内核程序。内核处理完后,主动出发中断,把CPU执行权限交回给用户程序,回到用户态继续工作。
Monolithic Kernel
Monolithic Kernel的意思是宏内核,Linux内核架构就是宏内核,意味着Linux的内核是一个完整的可执行程序,且拥有最高的权限。
宏内核的特征是系统内核的所有模块,比如进程调度、内存管理、文件系统、设备驱动等,都运行在内核态。
不过,Linux也实现了动态加载内核模块的功能,例如大部分设备驱动是以可加载模块的形式存在的,与内核其他模块解耦,让驱动开发和驱动加载更为方便、灵活。
与宏内核相反的是微内核,微内核架构的内核只保留最基本的能力,比如进程调度、虚拟机内存,中断等,把一些应用放到用户空间,比如驱动程序、文件系统等。这样服务与服务之间是隔离的,单个服务出现故障或者完全攻击,也不会导致整个操作系统挂掉,提高了操作系统的稳定性和可靠性。
微内核功能少,可移植性高,相比宏内核有一点不好的地方在于,由于驱动程序不在内核中,而且驱动程序一般会频繁调用底层能力的,于是驱动和硬件设备交互就需要频繁切换到内核态,这样会带来性能损耗。华为的鸿蒙操作系统的内核架构就是微内核。
还有一种内核叫做混合类型内核,它的架构有点像微内核,内核里面会有一个最小版本的内核,然后其他模块会在这
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。