<实验五>linux操作系统内核的工作过程


1. 操作系统工作的基础:内核

存储程序计算机:当前执行的程序与数据都存储在内存中。

堆栈(函数调用堆栈)机制:ESP指向栈顶(start),EBP指向栈底(bottom

Win32函数调用过程

1压入参数:这里依据以上的调用方式将调用者给出的参数一一压入堆栈。
(2)压入断点:当程序执行到Call指令的时候,当前语句的地址作为断点地址压入堆栈。
(3)跳转:即eip的值被重新设置为被调函数的起始地址。

中断机制:中断使得硬件得以与处理器进行通信。

 2.在操作系统工作的基础之上,请您简述操作系统(内核)是如何工作,宏观概述结合关键点的微观(CS:EIP、EBP/ESP等的变化)

        内核就是为进程提供访问系统的硬件资源和虚拟操作环境的功效它屏蔽了用户进程直接访问硬件资源的可能在非特权模式,它不能访问系统资源,它仅仅能访问自己的内存空间在特权模式,它可以访问所有的内核数据结构和底层硬件寄存器。若一个用户要访问系统的内核系统服务,则它必须将自己变成内核工作模式除了通过系统调用来完成用户模式(系统调用)转换,还能通过相应设备中断,或者通过处理器陷阱来完成

1)  系统调用---从用户模式由上一条陷阱指令或者一个软件中断来完成系统调用;

2)  中断--控制进入内核的向量转移,一般有硬件设备引起的;是个对正在执行的进程的异步产生的;此产生在中断的上下文中;

3)  陷阱--也是一个进入内核的向量转移;

上文中在转向内核态后,内核save_all保存现场后,执行代码,当有中断来到的时候,cpu转去执行中断历程,这时上下文变成中断的,并且cs:eip指向中断历程,刚才的内核线程压栈。

用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程要传递很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存器值、变量等。所谓的“进程上下文”,可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。

       当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称为该进程的上下文。当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的上下文,以便在再次执行该进程时,能够必得到切换时的状态执行下去。在LINUX中,当前进程上下文均保存在进程的任务数据结构中。在发生中断时,内核就在被中断进程的上下文中。

在Linux操作系统中,为了系统内核的安全不受用户应用程序的破坏,将系统工作的状态分为了用户态和内核态,用户态是应用程序工作的状态,而Linux内核运行时的状态就是内核态。我们在使用计算机时,大部分时间都是使用用户程序,故工作在用户态。但是当需要调度和内存管理时,需要内核来执行内核程序,即陷入内核态。那么计算机如何由用户态切换到内核态,又如何返回用户态呢?

 通过中断机制。中断发生后,当前进程的上下文压栈。Eip指向内核进程,然后陷入内核态,处理内核函数。当执行完毕后,恢复用户进程的上下文,然后回到用户态。

 详细的说,当用户进程切换到内核进程时,用户进程会对应一个内核栈,用户进程的eflags,cseip被压入这个内核栈。而当执行到中断程序时,SAVE_ALL会将剩余的用户进程寄存器的值压入内核栈。这时系统开始执行中断处理程序。当执行完毕后,内核会调度,通过执行schedule函数进行进程调度以选择出将要执行的进程并调用__switch_to函数将SSESP切换到即将要执行的进程的内核栈。内核调用restore_all函数将内核栈中的上下文恢复至相应的寄存器。


以上是linux操作系统内核的工作过程。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值