进程的切换和系统的一般执行过程

Posted on 2016-04-14 11:49  20135131张潇月  阅读(194)  评论(0编辑  收藏  举报

张潇月+ 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 

一、进程调度与进程调度的时机分析

1.不同类型的进程有不同的调度需要

第一种分类:I/O-bound、CPU-bound;第二种分类:批处理过程、实时进程、交互式进程;

2.什么是调度策略?

是一组规则,他们决定什么时候以怎样的方式选择一个新的进程运行。

3.liunx进程的优先级

用特定的算法计算出进程的优先级,用一个值表示,这个值表示把进程如何适当的分配给CPU

Linux进程中的优先级是动态的,调度程序会根据进程的行为周期性的调整进程的优先级

较长时间未非配到CPU,优先级上升;在CPU上运行了很长时间,优先级下降。

4.schedule函数(负责实现调度)

进程调度的时机:

中断处理过程、直接调用schedule函数或返回用户态的根据need_resched标记调用schedule

内核线程可以直接调用schedule函数进行进程切换,可主动可被动

用户态进程无法实现主动调度,仅能通过某个时机进行调度,即中断处理过程中进行调度。

用户态进程只能被动调用。

二、进程上下文切换的代码分析

为了控制进程的执行,内核必须有能力挂起正在CPU上执行的进程,并恢复以前挂起的某个进程的执行,这叫做进程切换、任务切换、上下文切换;

挂起正在CPU上执行的进程,与中断时保存现场是不同的,中断前后是在同一个进程上下文中,只是由用户态转向内核态执行;

进程上下文包含了进程执行需要的所有信息

用户地址空间: 包括程序代码,数据,用户堆栈等

控制信息 :进程描述符,内核堆栈等

硬件上下文(注意中断也要保存硬件上下文只是保存的方法不同)

schedule()函数选择一个新的进程来运行,并调用context_switch进行上下文的切换,这个宏调用switch_to来进行关键上下文切换

先是选择进程

进程上下文切换

关键

next_ip一般是$1f,对于新创建的子进程是ret_from_fork

jmp是寄存器传递参数的

三、Linux系统的一般执行过程分析

1.最一般的情况:

关键点:中断和中断返回有一个CPU上下文的切换,进程调度过程中有进程上下文的切换。

2.特殊情况:

next_ip=ret_from_fork

3.内核与舞女

dancing girl vs. taxi girl

哪一个进程招手就可以陷入到内核态,内核态里面走一程之后返回到用户态,再需要到中断就进入到内核态,没人了就空转。内核就相当于舞女,进程就相当于客人。内核是各种中断处理过程中和内核线程的集合。

四、Linux操作系统架构和系统执行过程概览

操作系统的基本概念

操作系统内核架构

最简单也是最复杂的操作——执行ls命令

从CPU和内存的角度看Linux系统的执行

 

Copyright © 2024 20135131张潇月
Powered by .NET 8.0 on Kubernetes