分类 操作系统 中的文章

上下文切换

上下文切换指的是内核(操作系统的核心)在CPU上对进程或者线程进行切换。上下文切换过程中的信息被保存在进程控制块(PCB-Process Control Block)中。PCB又被称作切换帧(SwitchFrame)。上下文切换的信息会一直被保存在CPU的内存中,直到被再次使用。 上下文切换定义 CPU 上下文切换 虽然系统的 CPU 个数有限,但能支持同时运行多个任务。当然这种同时只是宏观上的假象,如果从微观角度观察,会发现系统在不停轮流切换任务,使得每个任务都能获得运行的机会。 CPU 寄存器和程序计数器就是 CPU 上下文,因为它们都是 CPU 在运行任何任务前,必须的依赖环境。 CPU 是状态 + 存储的模型,其符合图灵机这种理想设备 内存 PC 指针指向下一条待运行的指令(状态) 计算规则 其他辅助计算的寄存器(状态) 多任务的每个任务都有自己的状态。当任务 1 切出,任务 2 切入时,CPU 的状态也要切换成任务 2 上一次切出时的状态,这样任务 2 才能继续运行。这些状态即是 CPU 上下文,CPU 上下文切换即保存和恢复 PC 和辅助计算的寄存器(也就是 CPU 寄存器和程序计数器)。 CPU 上下文切换的类型 根据任务的不同,可以分为以下三种类型: 进程上下文切换 线程上下文切换 中断上下文切换 进程上下文切换 发生进程上下文切换的场景 为了保证所有进程可以得到公平调度,CPU 时间被划分为一段段的时间片,这些时间片再被轮流分配给各个进程。这样,当某个进程的时间片耗尽了,就会被系统挂起,切换到其它正在等待 CPU 的进程运行。 进程在系统资源不足(比如内存不足)时,要等到资源满足后才可以运行,这个时候进程也会被挂起,并由系统调度其他进程运行。 当进程通过睡眠函数 sleep 这样的方法将自己主动挂起时,自然也会重新调度。 当有优先级更高的进程运行时,为了保证高优先级进程的运行,当前进程会被挂起,由高优先级进程来运行 发生硬件中断时,CPU 上的进程会被中断挂起,转而执行内核中的中断服务程序。 进程/线程的CPU上下文切换成本来源 CPU 中的寄存器似乎一只手就数的过来,切换的成本非常小,为什么会造成系统负载显著升高呢?Linux 操作系统中的任务有进程和线程,切换的主要成本来自于进程/线程的上下文切换。……

阅读全文

进程和线程有什么区别

定义 进程 是具有一定独立功能的程序、它是系统进行资源分配和调度的一个独立单位,重点在系统调度和单独的单位,也就是说进程是可以独 立运行的一段程序。 线程 线程进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源。在运行时,只是暂用一些计数器、寄存器和栈 。 关系 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。 资源分配给进程,同一进程的所有线程共享该进程的所有资源。用户进程主要段segment:stack(向低地址),heap,.rodata,data/bss,.text。一个进程,上面的5部分是主要的,必须的。线程只拥有stack(线程栈,线程栈是单个线程所独享的,2M),保存自己的函数调用过程,比如heap,.rodata,data/bss,text段都是共享的。 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。 处理机分给线程,即真正在处理机上运行的是线程。 线程是指进程内的一个执行单元,也是进程内的可调度实体。 区别 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。 ……

阅读全文