笔记开始

1. 进程

进程:就是一个程序运行起来的状态,进程是操作系统用来分配资源的基本单位,分配资源指的是独立的内存空间

image
image

僵尸进程:当A进程fork(底层调的clone)了一个B进程,那么A叫做B的父进程,父进程当中会维护子进程的PCB结构,如果子进程已经退出,父进程没有释放子进程的pcb,那么这个子进程在系统当中看到的就是一个被defunct标记的僵尸进程,(僵尸进程只占pcb,影响不是太大,如果太多的话就有影响,僵尸进程的标记是defunct)

孤儿进程:子进程还没退出,父进程先退出了,那么子进程就没有了父亲,这个时候系统会将这个子进程分配给父进程的父进程去管理(系统会交给一个特殊的进程去处理,没有太大影响,只是换了个爹)
image

2. 线程

线程:是一个进程中不同的执行路径,线程是操作系统进行执行调度的基本单位,线程调度执行(线程共享进程的内存空间,没有自己独立的内存空间)
线程在linux中的实现:就是一个普通的进程,只不过和其他进程共享资源(内存空间 全局数据等等);其他系统都有各自的LWP(Light Weight Process轻量级进程)的实现,高层面理解:一个进程中不同的执行路线

3. 纤程

纤程/协程(Fiber)(线程中的线程):jvm是运行在用户空间的,jvm的线程与操作系统的线程是一 一对应的,jvm新开一个线程需要通过系统调用,通过内核创建,然后再同步回用户态;而纤程是在jvm的一个线程里面分出来的分支,不需要跟操作系统内核打交道,也不会跟操作系统的线程一 一对应,切换快速,是在jvm层面调度的,用户态的线程,切换和调度不需要经过os

优势:
1、占资源少,os线程需要1M,Fiber:4k, 2、切换比较简单,
3、启动很多个 目前支持内置纤程的语言:Kotlin,Scala,Go,Python(lib),java(没有内置、盼望内置)在类库(quasar-core)级别可以支持
应用场景:很短的计算任务,不需要和内核打交道,并发量高
image

4. 内核线程

内核线程:内核启动之后经常要做一些后台操作,这些由Kernel Thread来完成,只在内核空间运行,用户态不能访问

5. 进程调度

进程(任务)调度:内核进程调度器决定,该哪个进程允许,何时运行,运行多长时间,这个过程叫做进程调度,linux下:每个进程都有自己的调度方案,可以自定义,但是linux内核有许多内置的调度方案,不需要我们自己写

5-1.单任务:一个操作系统上面只能干一件事儿

image

5-2.多任务:

可以多个进程运行,分抢占式和非抢占式,(现在呢大多是抢占式,由进程调度器控制)
image

5-3.linux2.5采用O(1)调度策略

linux2.5采用O(1)调度策略,比如每个进程分配10毫秒,偏向服务器,但是对交互不友好,比如有的进程比较着急,但是也需要排队等待一个10毫秒

linux2.6采用CFS(Completely Fair Scheduler)调度策略,按优先级分配时间片的比例,记录每个进程的执行时间,如果有一个进程执行时间不到应该分配的比
image

5-4.进程调度的基本概念

image

5-5.linux默认的调度策略:

实时进程(急诊)优先级分高低-FIFO(优先级高的先执行),优先级一样-RR(round robin);普通进程:CFS
image

6.中断:

硬中断:键盘、网卡、打印机等硬件进行的中断,中断处理机制的实现细节,比如: 1、键盘按下会产生一个中断信号传递给一个芯片(中断处理器),然后中断处理器告诉给cpu,2、cpu根据中断向量表找到固定的处理程序,3、然后这个处理程序将这个中断信号交给内核(kernel),4、内核找到中断处理程序开始处理,找到正在运行的程序当中正在等待键盘输入的程序,5、然后才是程序开始处理
image

软中断(十六进制的80中断):软件给的中断,系统调用的操作都会进行软中断,现在的硬件层面的支持有sysenter
image

上一篇:https://segmentfault.com/a/11...
下一篇:https://segmentfault.com/a/11...


萌妹子_liu
28 声望43 粉丝

萌萌哒,程序猿