<>阅读笔记------进程数据结构

Linux系统中一个进程可以在内核态或用户态下执行,并且分别使用各自独立的内核态和用户态堆栈。
用户堆栈用于进程在用户态下临时保存调用函数的参数和局部变量等数据;内核堆栈则含有内核程序执行函数调用时的信息。

Linux进程数据结构的一些字段:
state:进程状态字段。
TASK_RUNNING,正在执行;TASK_INTERRUPTIBLE,TASK_UNINTERRUPTIBLE,因等待而处于空闲状态,区别是能否被信号唤醒;
TASK_STOPPED,停止状态,比如DEBUG时候走到断点;TASK_ZOMBIE,进程已被终止,但进程数据结构项仍然存在于任务结构表。
utime,stime,cutime,cstime:
Linux的time命令和Ruby的Benchmark会产生一个结果,其中含有utime和stime的属性,这两个属性其实对应的是进程的数据结构中的utime和stime。
cutime和cstime则是进程的子进程分别在用户态和内核态运行的时间(滴答数)。
counter(滴答数):进程数据结构中的counter字段,进程刚建立时初始值由priority赋值。该字段单位为系统时钟周期,
该字段含义为,正常情况下,切换到另一个进城之前,但前进程还可以执行counter个时钟周期。
很多语言或者脚本的最后一个方法都会写exit(n),exit也是进程数据结构的一个属性字段,表示程序中止时的退出码,
很多子进程用这个字段告诉父进程它的执行结果状态。
alarm:如果进程使用系统调用alarm(x秒)来设置该字段的值,那当x秒(转换为系统滴答数)过去后,系统将向该进程发送一个SIGALRM信号,
默认会终止该进程执行。windows下面有个定时操作命令我每天都会用,shutdown -s -t 1200,意思是20分钟后自动关机,之前我一般躺在床上,电脑则在放音乐。
pwd:进程启动时会将当前工作目录的路径写入pwd字段,然后根据相对路径就可以拼成绝对路径,该字段可以通过系统调用chdir实现。
executable:进程运行的执行文件在内存中i节点结构指针。如果executable->i_count大于1,我们就知道这个可执行文件同时被多个进程执行。
程序可以通过这个来保证对一个用户同时只启动一个。
tss:这个重要,当进程被切换前,该进程用tss_struct保存当前处理器的所有寄存器值。当进程重新执行时,CPU利用tss恢复寄存器状态。

你可能感兴趣的:(数据结构,linux,windows,脚本,Ruby)