标签归档:操作系统

USTC001 LINUX操作系统分析 部分期末考试题

想了我好久,却不知道我哪里写错了。后来发现我的是对的。要以16进制的格式写,而我却用10进制的格式。

1# 在Linux系统的一般执行过程中,即用户态进程X切换到用户态进程Y的过程中,分析如下进程切换的关键汇编代码,请问系统执行到标号1(即第50行代码)之前的时间点CPU的寄存器eip的值是?直接填eip存储的数值(立即数以$开头)
答案就是$1f 2# 从运行时的角度(执行视图)来看Linux系统,下列哪些属于Linux系统中的执行实体?

一直以来, linux内核并没有线程的概念. 每一个执行实体都是一个task_struct结构, 通常称之为进程. 进程是一个执行单元, 维护着执行相关的动态资源. 同时, 它又引用着程序所需的静态资源(注意这里说的是linux中的进程).通过系统调用clone创建子进程时, 可以有选择性地让子进程共享父进程所引用的资源. 这样的子进程通常称为轻量级进程.

——

《linux线程浅析》

3# Linux系统中,用户态切换到内核态时,int指令或中断信号会触发CPU自动保存下面哪些信息到内核堆栈中?

#2.Linux系统的一般执行过程

Linux系统的一般执行过程大概可以抽象成:

最一般的情况:正在运行的用户态进程X切换到运行用户态进程Y的过程

  1. 正在运行的用户态进程X
    
  2. 发生中断——save cs:eip/esp/eflags(current) ,
    
    
    load cs:eip(entry of a specific ISR)
    
    
    ss:esp(point to kernel stack). 这一过程由CPU自动完成
    
  3. SAVE_ALL //保存现场
    
  4. 中断处理过程中或中断返回前调用了schedule(),其中的switch_to做了关键的进程上下文切换
    
  5. 标号1之后开始运行用户态进程Y(这里Y曾经通过以上步骤被切换出去过因此可以从标号1继续执行)
    
  6. <a href="http://codelab.shiyanlou.com/s?refs=restore_all&amp;project=linux-3.18.6" rel="nofollow" target="_blank">
     restore_all
    </a>
    //恢复现场
    
  7. iret - pop cs:eip/ss:esp/eflags from kernel stack
    
  8. 继续运行用户态进程Y
    



理解进程调度时机跟踪分析进程调度与进程切换的过程

4# Linux内核中,系统调用处理过程中保护现场使用的宏是 SAVE_ALL 5# 动态连接有两种形式:可执行程序装载时动态连接和运行时动态链接。

——《

linux可执行文件的装载