`
redheart_2006
  • 浏览: 21814 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类

进程总结

 
阅读更多
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值恢复寄存器的值,就会导致进程切换

分类: 自己动手写操作系统,自己动手写操作系统第二次回顾
分享到:
评论

相关推荐

    基于yolov5目标检测的跌倒检测数据集(voc格式)-上部

    基于yolov5目标检测的跌倒检测数据集(voc格式)——上部

    STM32通过ADC多通道检测数据

    工程代码基于STM32F103C8T6,通过ADC多通道检测4个数据,使用一个电位器产生0-3.3v连续变化的模拟电压信号,和三个传感器:光敏电阻模块,热敏电阻模块,红外反射模块。之后用stm32的adc读取数据,并且通过oled屏幕显示4个数据。

    2024年中国便携式RFID读写器行业研究报告.docx

    2024年中国便携式RFID读写器行业研究报告

    2024年中国超声腐蚀监测系统行业研究报告.docx

    2024年中国超声腐蚀监测系统行业研究报告

    惠普打印机主板免芯片编程器固件HP 136NW/W,实测HP 136WM也可以用

    惠普打印机主板免芯片编程器固件HP 136NW/W,实测HP 136WM也可以用,另外还有原机固件备份! 免芯片就是加粉不需要更换芯片了,一直显示满粉

    蚁群算法MATLAB代码

    蚁群算法MATLAB代码

    ManifestDownload_230712_52pojie.zip.cab

    ManifestDownload_230712_52pojie.zip.cab

    基于python实现的Socket服务器与传感器通讯手段实现的家庭能源管理系统

    【作品名称】:基于Socket作为服务器与传感器通讯手段实现的家庭能源管理系统 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。

    2024年中国被动长波红外镜头行业研究报告.docx

    2024年中国被动长波红外镜头行业研究报告

    配送路线优化系统,Web端项目,遗传算法+蚁群算法+多目标优化

    简介:配送路线优化系统,Web端项目 算法:遗传算法+蚁群算法+多目标优化 技术栈:前端采用Vue-CLI开发(frontend),后端采用Django框架开发(ulb_manage)

    2024年中国超声波凝固和切割装置行业研究报告.docx

    2024年中国超声波凝固和切割装置行业研究报告

    node-v4.5.0-win-x64.zip

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    国际象棋游戏数据集 CSV 2W+场次 (Lichess)

    这是一组从网站上的精选用户那里收集的 20,000 多款游戏 Lichess.org,以及如何收集更多游戏。我还将在未来收集更多游戏时上传它们。此套装包含:游戏 ID;额定值 (T/F);开始时间;结束时间;匝数;游戏状态;胜利者;时间增量;白色玩家 ID;白人球员评分;黑色玩家 ID;黑人球员评分;所有动作均采用标准国际象棋符号;Opening Eco(任何给定开口的标准化代码,在此处列出); 开场名称;开盘(开盘阶段的移动次数)

    属于一枚普通学生的NLP学习笔记

    自己的NLP学习笔记,暂时还没有加上参考文章的链接~ 以后一定补上!

    建伍8100车载对讲写频软件

    建伍8100车载对讲写频软件

    ISO 4892-3 2016 塑料实验室光源暴露方法第3部分:荧光紫外灯.pdf

    ISO 4892-3 2016 塑料实验室光源暴露方法第3部分:荧光紫外灯.pdf

    node-v4.8.6-win-x64.zip

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    特斯拉AP(autopilot)和FSD(Full+Self-Drive.pdf

    特斯拉AP(autopilot)和FSD(Full Self-Drive

    node-v7.7.4-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v8.2.1-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics