• 42 进程的初步实现(上)


    参考

    https://blog.51cto.com/13475106/category6.html及狄泰软件相关课程

    1.进程=运行当中的程序,应用程序的目的就是解决问题,生成的可执行文件,执行会有一个进程,进程的目的就是完成任务。

    思考-计算机只有一个处理器,那么如何同时执行多个任务?
    远古时期的计算机系统
    操作系统-进程的初步实现
    由上图可知,处理器一次只执行一次任务,所以当task1执行结束才会从任务等待队列中继续执行。远古时期存在的弊端-当正在执行的任务需要外部设备交互时,处理器几乎处于K线状态,其他任务无法执行,只能等待。

    A.任务定义(进程定义)
    操作系统-进程的初步实现
    在微观角度(操作系统),一个任务包含上图所拥有的。对多任务的实现我们需要完成以下的执行情况操作系统-进程的初步实现
    多任务的并行执行,在多数情况下,任务数量大于处理器数量,因此,无法做到真正意义上的任务并行执行,但是可以让处理器每个时间单位执行一个任务,最终,处理器在多个任务之间切换执行
    B.如何在计算机内部表示一个任务?
    C语言结构体-该处表示一个进程的表示(对应之前的任务定义),rv表示寄存器的值(保存进程的状态),stack表示栈,代码与数据(程序加载到内存中)以后在详解
    操作系统-进程的初步实现
    任务的执行状态如下图所示-结构体的寄存器的值-保存在内存当中
    操作系统-进程的初步实现
    TSS(保存特权级转换的栈信息,会有各个寄存器的值)-在从低特权级转入0特权级执行时,进行切换栈时需要用到TSS,该表对应着右边的结构体,下图右图结构体表示前四个字节表示前一个栈信息,后续表示的是各个特权级的栈信息,unused[22],表示中间没有用到的寄存器
    操作系统-进程的初步实现

    进程实现需要的原材料
    1.LDT-x86系统中的任务使用私有的段描述符
    2.TSS-特权级提升执行时需要-查看栈信息
    3.RegValue-保存任务执行时的上下文信息
    4.Stack-x86系统中的任务私有的栈
    5.GDT-任务对应的LDT和TSS需要在GDT中注册

    在这里出现的问题-如何动态在GDT中注册LDT和TSS?要设置GDT中的描述符就必须获得GDT的起始地址,这个地址如何获得?
    解决方案如下(共享内存)-loader不同的地址写入交换内存,kernel可以通过在交换内存中拿到所需的地址
    操作系统-进程的初步实现
    详细的代码放置以下链接:链接:https://pan.baidu.com/s/1LbsIhwyjzTY_4sBV96RuDw 提取码:y0zy

    运行结果如图所示

  • 相关阅读:
    Hash 函数资源链接汇总
    Zookeeper 初体验之——伪分布式安装
    Zookeeper 初体验之——JAVA API 初探
    布隆过滤器(Bloom Filter)详解
    7天学会Maven(第一天——了解 Maven)
    仿中关村在线首页弹出式广告插件(jQuery版)
    介绍几款在线代码编辑器
    兼容浏览 firefox、chrome、ie 的flash(swf) 的代码!
    我的Discuz!X2 、Ucenter 1.6、ASP.NET 应用程序整合经历
    2011年最后一博:仿HAO123的邮箱登录
  • 原文地址:https://www.cnblogs.com/lh03061238/p/14679569.html
Copyright © 2020-2023  润新知