天道酬勤,学无止境

操作系统之路

操作系统-进程的初步实现

操作系统-进程的初步实现上 1.进程=运行当中的程序,应用程序的目的就是解决问题,生成的可执行文件,执行会有一个进程,进程的目的就是完成任务。 思考-计算机只有一个处理器,那么如何同时执行多个任务?远古时期的计算机系统由上图可知,处理器一次只执行一次任务,所以当task1执行结束才会从任务等待队列中继续执行。远古时期存在的弊端-当正在执行的任务需要外部设备交互时,处理器几乎处于K线状态,其他任务无法执行,只能等待。 A.任务定义(进程定义) 在微观角度(操作系统),一个任务包含上图所拥有的。对多任务的实现我们需要完成以下的执行情况多任务的并行执行,在多数情况下,任务数量大于处理器数量,因此,无法做到真正意义上的任务并行执行,但是可以让处理器每个时间单位执行一个任务,最终,处理器在多个任务之间切换执行 B.如何在计算机内部表示一个任务? C语言结构体-该处表示一个进程的表示(对应之前的任务定义),rv表示寄存器的值(保存进程的状态),stack表示栈,代码与数据(程序加载到内存中)以后在详解任务的执行状态如下图所示-结构体的寄存器的值-保存在内存当中TSS(保存特权级转换的栈信息,会有各个寄存器的值)-在从低特权级转入0特权级执行时,进行切换栈时需要用到TSS,该表对应着右边的结构体,下图右图结构体表示前四个字节表示前一个栈信息,后续表示的是各个特权级的栈信息,unused[22]

2021-03-27 12:19:15    分类:博客    寄存器 进程   操作系统之路

操作系统-进程的初步实现

操作系统-进程的初步实现上 1.进程=运行当中的程序,应用程序的目的就是解决问题,生成的可执行文件,执行会有一个进程,进程的目的就是完成任务。 思考-计算机只有一个处理器,那么如何同时执行多个任务?远古时期的计算机系统由上图可知,处理器一次只执行一次任务,所以当task1执行结束才会从任务等待队列中继续执行。远古时期存在的弊端-当正在执行的任务需要外部设备交互时,处理器几乎处于K线状态,其他任务无法执行,只能等待。 A.任务定义(进程定义)在微观角度(操作系统),一个任务包含上图所拥有的。对多任务的实现我们需要完成以下的执行情况多任务的并行执行,在多数情况下,任务数量大于处理器数量,因此,无法做到真正意义上的任务并行执行,但是可以让处理器每个时间单位执行一个任务,最终,处理器在多个任务之间切换执行B.如何在计算机内部表示一个任务?C语言结构体-该处表示一个进程的表示(对应之前的任务定义),rv表示寄存器的值(保存进程的状态),stack表示栈,代码与数据(程序加载到内存中)以后在详解任务的执行状态如下图所示-结构体的寄存器的值-保存在内存当中TSS(保存特权级转换的栈信息,会有各个寄存器的值)-在从低特权级转入0特权级执行时,进行切换栈时需要用到TSS,该表对应着右边的结构体,下图右图结构体表示前四个字节表示前一个栈信息,后续表示的是各个特权级的栈信息,unused[22]

2021-03-27 12:19:12    分类:博客    寄存器 进程   操作系统之路

操作系统-进程的初步实现

操作系统-进程的初步实现上 1.进程=运行当中的程序,应用程序的目的就是解决问题,生成的可执行文件,执行会有一个进程,进程的目的就是完成任务。 思考-计算机只有一个处理器,那么如何同时执行多个任务?远古时期的计算机系统由上图可知,处理器一次只执行一次任务,所以当task1执行结束才会从任务等待队列中继续执行。远古时期存在的弊端-当正在执行的任务需要外部设备交互时,处理器几乎处于K线状态,其他任务无法执行,只能等待。 A.任务定义(进程定义)在微观角度(操作系统),一个任务包含上图所拥有的。对多任务的实现我们需要完成以下的执行情况多任务的并行执行,在多数情况下,任务数量大于处理器数量,因此,无法做到真正意义上的任务并行执行,但是可以让处理器每个时间单位执行一个任务,最终,处理器在多个任务之间切换执行B.如何在计算机内部表示一个任务?C语言结构体-该处表示一个进程的表示(对应之前的任务定义),rv表示寄存器的值(保存进程的状态),stack表示栈,代码与数据(程序加载到内存中)以后在详解任务的执行状态如下图所示-结构体的寄存器的值-保存在内存当中TSS(保存特权级转换的栈信息,会有各个寄存器的值)-在从低特权级转入0特权级执行时,进行切换栈时需要用到TSS,该表对应着右边的结构体,下图右图结构体表示前四个字节表示前一个栈信息,后续表示的是各个特权级的栈信息,unused[22]

2021-03-27 12:19:10    分类:博客    寄存器 进程   操作系统之路

操作系统-保护模式中的特权级下

Q:使用调用门如何实现不同特权级之间的跳转?(从高到低)在实际的使用中,调用门只支持从低特权级到高特权级执行,无法利用调用门从高特权级跳转到低特权级执行A.调用门的特权级跳转分析左边代码段为低特权级代码段,利用调用门以及call指令(远调用)可以进入右边高特权级代码段,最后利用return (跳转指令)far返回低代码段。实现思路调用门的特权级跳转-通过远调用(call far):低特权级到高特权级;通过远返回(retf):高特权级到低特权级。调用过程(近调用)如下左边代码将ax bx寄存器值压入栈,通过call指令直接调用段中func函数,call之后程序转入func入口处执行,在此过程中,eip寄存器会被压入栈中,当ret指令执行时,从栈顶将eip寄存器之前的值拿出,恢复到eip寄存器中,执行完毕,程序执行流成功执行。相同理,远调用一样,实现过程1.在实现之前需要知道的是,x86处理器对于不同的特权级需要使用不同的栈,每一个特权级对应一个私有栈,特权级跳转变化之前必须指定好相应的栈2.从高特权级到低特权级实现:指定目标栈段选择子,指定栈顶指针位置,指定目标代码段选择子,指定目标代码段偏移,最后进行跳转代码如下 %include "inc.asm" org 0x9000 jmp ENTRY_SEGMENT [section .gdt] ; GDT definition ; 段基

2021-03-27 11:06:29    分类:博客    特权级转移 调用门 远返回 栈   操作系统之路