zoukankan      html  css  js  c++  java
  • 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

    运行结果如图所示

  • 相关阅读:
    使用AStyle进行代码格式化
    ubuntu14.04设置静态ip
    网络模拟器WANem使用配置图文教程
    ServerSocket 默认邦定IP
    shell判断文件是否存在
    linux文本模式下使用PPPOE拨号ADSL上网的方法
    几个国内速度最快的centos yum(更新源)
    linux命令执行返回值(附错误对照表)
    如何在java程序中调用linux命令或者shell脚本
    windows多线程详解
  • 原文地址:https://www.cnblogs.com/lh03061238/p/14679569.html
Copyright © 2011-2022 走看看