http://www.cnblogs.com/wanghj-dz/p/3991997.html
第六章 进程总结
http://blog.csdn.net/begginghard/article/details/7389329
进程总结
挂起一个进程,需要把程序运行信息保存到进程控制块PCB中
进程恢复,运行程序时,需要用到该程序LDT中的段描述符,所以需要在PCB中有LDT描述符,LDT选择子,所以需要对PCB中的LDT描述符,LDT选择子作初始化.
进而需要在GDT中初始化该进程的LDT.
进程挂起或恢复过程中,需要用到三个堆栈:ring3级的程序堆栈,ring0级的PCB堆栈即REGS, 中断程序继续运行所需的ring0级的内核栈.所以需要用到TSS,需要初始化TSS.以及在GDT中初始化TSS描述符.
------------------------
所以总结如下:一个进程所涉及到的无非是:PCB,进程体,GDT,LDT,TSS
所以新建立一个进程时,需要新建一个该进程的PCB,加入到进程表中,并对该PCB进行初始化.同时修改GDT,LDT,TSS
----------------------
init_descriptor(&gdt[INDEX_LDT_FIRST], 参数1 INDEX_LDT_FIRST是LDT在GDT中索引为5,定义在protect.h中。见书236页
vir2phys(seg2phys(SELECTOR_KERNEL_DS),proc_table[0].ldts), 参数2 KERNEL_DS段基址+proc_table[0].ldts的偏移量得到进程ldt的基址
LDT_SIZE * sizeof(DESCRIPTOR), 参数3 将进程ldt的基址放到gdt[index_ldt_first]处
DA_LDT 参数4
);
初始化GDT中的LDT描述符
--------------------------------
http://www.cnblogs.com/wanghj-dz/archive/2011/05/20/2051641.html 这个我自己总结的还是很不错的。
http://www.cnblogs.com/wanghj-dz/archive/2011/05/19/2051173.html restart()中的一些固定值需要了解,如 P_STACKTOP 指向进程PCB中regs的最尾端
--------------------------------------------------------------------------------------------------------------
只有调用进程运行在ring1,其他都运行在ring0。包括对进程PCB赋值初始化,中断处理,压入寄存器的值,挂起或恢复等等。
中断发生时,cpu会自动把cs ip,ss ,sp ,eflags压入堆栈,这个是系统自动完成的,不需要代码。
所以进程从ring1到ring0时,cpu已经压入了cs,ip,ss,sp到进程PCB的regs里了,到了retAdrr要跳过所以esp-4,然后再压入其他的。
补充一下:压入寄存器值,恢复寄存器值都是使用进程PCB中的regs堆栈。 压入之后,在中断处理程序中需要调用函数啊,就不能再使用进程的regs堆栈了,而是要跳到内核堆栈。
跳到内核堆栈后,才开始对中断的真正处理。
http://www.cnblogs.com/wanghj-dz/archive/2011/05/20/2052025.html
http://www.cnblogs.com/wanghj-dz/p/3986583.html
http://www.cnblogs.com/wanghj-dz/archive/2011/05/16/2047747.html
--------------------------------------------------------------------------------------------------------------
call之前的push 是调用函数的参数。
call之后的add,是将之前的push导致的esp恢复原位。
CLI禁止中断发生
STL允许中断发生
clock_int_msg 是个"^” 符号。
call clock_handler clock_handler函数调用里面,修改p_proc_ready,p_proc_ready自加1,将p_proc_ready所指向的地址赋值给TSS中的ESP,会导致TSS里面的ESP值改变,
; 中断返回时,根据TSS里面的ESP值恢复寄存器的值,就会导致进程切换
分类: 自己动手写操作系统,自己动手写操作系统第二次回顾
分享到:
相关推荐
这篇文档主要总结了Linux进程的构成和80x86架构CPU对进程切换的支持机制。 1.1 进程的构成 一个进程通常由以下几个部分组成: 1. **task_struct**:这是进程控制块,包含了描述进程状态、资源分配、调度信息等核心...
Linux进程是操作系统中的一种基本抽象,它代表正在执行或等待执行的程序。进程不仅包括了程序的汇编代码,还包括程序的数据、状态以及各种资源,如文件、信号和内存等。在Linux内核中,每个进程都由一个task_struct...
### 进程管理与通信总结 #### 基础概念 **进程与程序的区别:** - **进程**:是程序的一次动态执行过程,在内存中运行。进程具有生命周期,从创建到终止,其状态(如运行态、等待态等)会随时间而变化。 - **程序...
进程的同步与互斥问题总结 进程的同步与互斥问题是操作系统中一个非常重要的概念。它解决了多个进程之间的资源竞争和相互制约关系问题。本文总结了进程的同步与互斥问题的分析和解决方法,并给出了十一个经典问题的...
进程管理总结 本资源摘要信息将对进程管理的重要概念和技术进行总结,并结合实践例题来加深理解。 一、进程管理概念 进程管理是操作系统中的一部分,负责管理和调度系统中的进程。进程是操作系统中最基本的执行...
别人自己写的总结,内容是常用进程间通信方法及函数
在这个"操作系统进程管理演示"中,我们将深入探讨几个关键的概念,包括进程的创建、时间片调度、阻塞与唤醒、进程撤销,以及如何显示就绪、阻塞和内存状态。 首先,我们来看**进程**。在操作系统中,进程是程序的...
批处理文件.bat文件终止进程即杀死进程语句总结 bat文件中终止进程的命令如下: 成功: taskkill /pid %~1% /f taskkill /F /IM xxxx.exe /T 失败: taskkill /FI "IMAGENAME eq xxx.exe" 失败者,并不是所有程序...
在操作系统的学习中,进程的创建是一个核心概念,其相关实验不仅帮助我们加深对进程的理解,还使我们能够掌握在Linux环境下如何通过系统调用进行进程的创建与管理。本文将通过详细解析操作系统实验中进程创建的步骤...
### 进程线程及堆栈关系的总结 #### 一、进程与线程的概念及其关系 **进程**是具有一定独立功能的程序在一个特定数据集合上的运行活动,是系统进行资源分配和调度的一个独立单位。进程是操作系统进行管理和调度的...
在这个总结中,我们将深入探讨进程的性质、编程技巧以及进程的退出机制,这些都是初学者在学习多任务处理时必须掌握的基础知识。 首先,我们要理解什么是进程。进程是计算机中运行的程序的一个实例,它包括程序代码...
下面是对实验报告的详细解读和知识点总结: 1. 进程概念: 进程是操作系统中的一种基本概念,指的是一段程序代码加上当前活动的集合,包括程序计数器和寄存器中的内容、进程堆栈段和数据段等。进程是操作系统中最...
进程间的通信(IPC,Inter-Process Communication)是操作系统中一种重要的功能,允许不同进程之间交换信息,协同工作。本文将重点讨论其中的共享内存方式。 共享内存是一种高效的数据交换机制,它允许多个进程共享...
总结来说,理解并掌握如何根据进程名称查找指定进程及其模块,是提高系统管理和维护能力的关键一步。通过学习相关的API调用和系统机制,开发者可以更有效地分析和控制系统的运行状态,确保系统的稳定和安全。
#### 四、总结 通过本次实验,不仅加深了对操作系统中进程管理基本原理的理解,还学会了如何利用C语言编程技术实现这些理论知识。虽然存在一些不足之处,但通过不断地迭代改进,可以进一步提高系统的稳定性和效率。
总结来说,VC++开发中,进程操作是系统编程的重要部分,涉及到枚举系统中运行的进程、关闭指定进程以及使用进程ID进行各种操作。通过学习和熟练掌握这些技术,开发者可以更好地控制和管理应用程序与其他进程的交互。...
华清进程资料总结涵盖了这一领域的深入理解,包括理论知识、代码实现以及相关的试题,旨在帮助学习者全面掌握这一主题。 1. **进程**:进程是操作系统资源分配的基本单位,它拥有独立的内存空间,包括代码段、数据...
### Linux高级编程知识点总结——进程线程 #### 进程与程序的区别及PCB - **进程与程序的区别**: - **程序**:指一组指令的有序集合,以文件形式存储在磁盘等存储媒介上,是一个静态的概念。 - **进程**:是一...
进程和线程是操作系统中两个核心概念,它们与程序的执行和系统资源的管理密切相关。 首先,进程是一个动态的概念,代表一个程序在特定数据集上的运行实例。它由代码、数据以及操作系统为管理进程所创建的进程控制块...