操作系统
-
计算机系统的层次结构,操作系统也是软件。
-
并行和并发
并行是指两个或者多个事件在同一时刻同时发生,无论宏观还是微观都是。2个cpu,执行2个线程,各一个。
并发是指两个或者多个事件,在宏观上的某段时间内是同时发生的,但是在微观上是交替发生的,即,某一时刻,只有一个事件发生。比如,在1核cpu执行2个线程。
-
分时
操作系统,就是一时间片为单位,轮流执行各项服务,比如常用的windows。但分时不能优先处理用户控制的紧急任务。那就有
实时
操作系统,就是要在严格的时限内完成某项事件,比如导弹系统。 -
指令,是处理器(cpu)能识别、执行的最基本命令。特权指令如:内存清零指令,分配资源等,不允许用户程序使用。非特权指令:加法指令等。
为防止用户程序使用特权指令,为了安全,用户态下只能使用非特权指令,核心态下可以使用全部指令
-
CPU(处理器、处理机)有2种状态,目态(用户态),管态(特权态、系统态、内核态或者核心态)。当CPU处于用户态时,不允许执行特权指令;当CPU处于核心态时,可执行包括特权指令在内的一切机器指令。
挂起线程或者唤醒线程CPU要从用户态转换到内核态,即切换线程或者分配资源,都是cpu在内核态才能完成的。
cpu处于什么态是根据
程序状态字
寄存器判断的。一些内核程序是操作系统运行所必需的程序。如时钟管理、中断处理、原语等。要不要橙色部分如进程管理可以分为大内核和微内核。
-
中断,用户态到核心态的
唯一
途径。核心态到用户态只需要设置一个状态的标志位,程序状态字寄存器。比如一个线程A的cpu时间片用完了,那cpu会收到一个中断信号,此时就会切换到核心态,该中断信号是说时间片已经用完了,线程A回到就绪状态,然后cpu会给下一个线程B时间片,并切换到用户态来执行这个新的线程B。在B执行过程中,要请求输出打印机,则会发出内中断信号给cpu,cpu就会切换到核心态(此时B进入阻塞状态),对中断信号进行处理,要求打印机操作。然后分配时间片给其他线程C,若打印机执行完成,会发送中断信号给CPU,CPU切换到核心态处理中断信号,中断信号是资源操作完成,则让线程B进入就绪状态,然后分配时间片给下一个任一线程
总体来说,不同的中断信号,cpu要做不同的处理。而一般进程、线程切换,分配IO设备都是需要特权指令的。所以cpu要进入核心态对中断信号进行处理。
中断可以为,io操作,强制终止,整数除0等。
-
进程和线程
从表象来看是一个运行的程序,比如打开一次记事本软件就会有一个进程出现,打开任务管理器就可以看到程序对应进程在运行,程序是一个静态的概念,而进程是一个动态的概念。
从定义来说,在还没有线程的时候,进程是系统进行资源分配和调度的基本单位,有了线程之后,系统的调度的基本单位就是线程了,线程也就是cpu执行流的最小单位,而进程则是系统进行资源分配的基本单位。
从上面我们可以得出以下几点:
第一,进程是系统分配资源的基本单元,线程是调用的基本单位,进程是动态的概念,程序是静态概念。
第二,进程包含了一个或者多个线程,也就是说现有进程才有线程。
第三,系统资源是分配给进程的,而线程们共享这些系统资源,共享方式就是共享内存。
第四,进程间的切换比线程之间的切换更加占用资源。
还有其他的,比如,进程的组成,进程的通信,进程的调度。线程分为2种等
-
进程的组成,PCB进程控制块,程序段和数据段。CopyOnWrite思想。
-
进程通信,共享存储,管道通信,消息传递。
-
进程调度,先来先服务,最短作业有限,时间片调度、优先级调度。
-
进程的状态
-
线程:可以分为用户级线程(协程)和内核级线程,有线程id,TCB。
一个qq进程,可以同时qq视频和发送文件,则这2个事情就是分别对应一个线程在处理。
用户级线程(协程)是更轻量级的线程,正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。
它的状态和控制是由应用程序控制的,对操作系统的内核来说是透明的。这样带来的好处就是性能得到了很大的提升,不会像核心态线程切换那样消耗资源。
程序一般不会直接去使用内核线程,而是去使用内核线程的一种高级接口——轻量级进程(Lightweight Process,LWP),轻量级进程就是我们通常意义上所讲的线程,也被叫做用户线程。由于每个轻量级进程都由一个内核线程支持,因此只有先支持内核线程,才能有轻量级进程。用户线程与内核线程的对应关系有三种模型:一对一模型、多对一模型、多对多模型,在这以4个内核线程、3个用户线程为例对三种模型进行说明。> 和内核级线程,对应关系是m对n,n<=m。即1对1,1对多,多对多。
内核级线程才是处理机cpu处理调度的单位。
-
管程:用于管理进程间共享某些资源方式。实现了在一个时间点,最多只有一个线程在执行管程的某个子程序。
-
PV原语操作和信号量:也是对资源共享的一种解决方法。
Linux中的信号量是一种
睡眠锁
。如果有一个任务试图获得一个不可用(已经被占用)的信号量时,信号量会将其推进一个等待队列,然后让其睡眠。这时处理器能重获自由,从而去执行其他代码。当持有的信号量可用(被释放)后,处于等待队列中的那个任务将被唤醒,并获得该信号量
原语是由若干条指令组成的,用于完成一定功能的一个过程。primitive or atomic action 是由若干个机器指令构成的完成某种特定功能的一段程序,具有不可分割性·即原语的执行必须是连续的,在执行过程中不允许被中断。
PV操作顺序:
1、执行P操作,信号量减一;2、然后进行对共享资源的访问;3、V操作,信号量加一。
总结:以上是操作系统简单的笔记,后续会增加内存,cpu,磁盘等内容的笔记。
【完】
正在去BAT的路上修行