进程表项字段理解

1.进程表项PCB字段

但是到底进程切换都有哪些操作呢?

转自:https://blog.csdn.net/shadow2512/article/details/73611805

概念:进程切换就是被中断进程与待运行进程之间的上下文切换(必须在内核模式下进行进程切换)。

具体过程

转换为内核模式,压入程序状态字和程序计数器,将被中断进程的栈指针保存到进程控制块,调整被中断进程的状态,把被中断的进程加入相关队列等待,选中下一个进程改变其状态,设备被选中的进程的地址空间,将被选中进程的栈指针存到处理寄存器中;切换到用户模式并且弹出程序状态字和程序计数器。

进程切换发生在时间片中断、IO中断;终止系统调用、发生异常。进程切换时伴随着进程状态的转换,比如从运行到阻塞、到等待。

上下文包括通用目的寄存器,浮点寄存器,程序计数器,用户栈,状态寄存器,内核栈,各种内核数据结构。(这是csapp 8.2.5中的原句)

内核可以处于进程上下文和终端上下文。

2.上下文

2.1 通用目的寄存器

转自:https://zhuanlan.zhihu.com/p/76950607

64位RAX寄存器

 0-31位是EAX位,0-15是AX位,通过AH可获取其中的数据。

 在32位操作系统中包含如下8个通用寄存器:

  • EAX:(针对操作数和结果数据的)累加器 ,返回函数结果
  • EBX:(DS段中的数据指针)基址寄存器
  • ECX:(字符串和循环操作数)计数器
  • EDX:(I/O指针)数据寄存器
  • EBP:(SS段中栈内数据指针)扩展基址指针寄存器
  • ESI:(字符串操作源指针)源变址寄存器
  • EDI:(字符串操作目标指针)目的变址寄存器
  • ESP:(SS段中栈指针)栈指针寄存器
lpAddress = VirtualAlloc(NULL, 0x100, MEM_COMMIT | MEM_TOP_DOWN, PAGE_READWRITE);
memcpy(lpAddress, string, 0x15);

例如运行上面的代码,调用函数,返回值lpAddress,存储在EAX中,它存储函数返回的结果;对于第二句的拷贝,将string字符串赋值给lpAddress,则esi是源地址寄存器,指向了string;edi是目的地址寄存器,指向了lpAddress;edx是数据寄存器,用于保存要复制的数据;ecx作为计数器,保存了要复制数据的大小。

http://blog.sina.com.cn/s/blog_c426f9590101nr8p.html,这里介绍道:

通用目的寄存器(GPRs) - 可以保存数据或地址两者,也就是说它们是结合数据/地址 寄存器的功用。 也可以从上述的寄存器功能看出,既可以存值也可以存指针,所以称为通用。

https://blog.csdn.net/u012005912/article/details/84380104

 通用寄存器的结构

通过mov、add、sub、and、or等命令实现逻辑和算术运算、地址计算和内存指针

此外还包括浮点、常数、向量、指令寄存器等等。

2.2 用户栈、内核栈、切换

转自:https://www.jianshu.com/p/6b2ec520ae02,

 https://blog.csdn.net/dandelionj/article/details/37933369,这篇博客对发生中断时,cpu各个寄存器中的指针或值保存到哪里进行了说明,系统中断即软件中断发生时,发生cpu特权级转换,在定位了内核栈地址后,就会将用户态堆栈指针ss和esp压入内核态堆栈,随后把标志积存器eflags的内容和返回位置cs,eip压入内核态堆栈。当系统调用结束时,就从内核栈恢复用户栈的状态。

2.3 程序状态字/状态寄存器

https://www.sohu.com/a/109359363_119709

程序状态字(Program Status Word, PSW)又称状态寄存器,主要用于反映处理器的状态及某些计算结果以及控制指令的执行。

 PSW是一个8位寄存器,用于存放程序运行中各种状态信息。

其中,F0RS1RS0可以由用户自己编程设定,其他位的状态是根据程序执行结果,由硬件自动设置的。

  • Cy:进位标志,是PSW中最常用的标志位。功能有二:一、存放算术运算的进位标志,在进行加减运算时,若操作结果的最高位有进位或借位,则自动置1,否则为0。二、在位操作中,作位累加器C使用。
  • Ac:辅助进位标志。在加减运算时,低4位向高4位进位或借位时,自动置1,否则为0。(似乎和上一个有重复?)
  • F0:用户标志位。用户可设置,常用作数据收发标志或准备好的标志。
  • RS1&RS0:寄存器组选择位。选择CPU当前使用的工作寄存器组,共有四组工作寄存器。
  • Ov:溢出标志位。在带符号的加减运算中,若运算超出了累加器A所能表示的符号数的有效范围(-128~127),则自动置1,表示产生了溢出,说明运算结果是错误的。否则为0。
  • P:奇偶标志位。表明累加器A中数据的奇偶性。若A中有奇数个“1”,则自动置1,否则为0。此标志位常用于串行通信中的奇偶校验。(不是说奇数偶数的意思?而是说当前数中1的个数是奇数还是偶数?)

2.4 内核数据结构

  • 描述地址空间的页表

简介:页表用来判定一个虚拟页是否缓存在了DRAM主存中,有效位为1时指向DRAM中的物理页起始位置;有效位为0包括两种情况,一是当前虚拟页面尚未被分配,二是已经分配给了某块磁盘内容,但它还未被缓存到DRAM中。

  • 包含有关当前进程信息的进程表(就是PCB,进程控制块)
  • 包含进程已打开的信息的文件表

转自:https://zhuanlan.zhihu.com/p/56251739

每个进程由内核创建,并且在内存中开辟task_struct结构体,即进程表,专门用于存放进程在运行过程中,所涉及到的所有与进程相关的信息。成员数多达300+个。

原文地址:https://www.cnblogs.com/BlueBlueSea/p/14489208.html