waring:标题党前言:点进来的小伙伴可能是为了看看结构体的长度的,当然不会让大家失望的,整个复制下来贴在下面了,另外学习C语言的方法无非就是多写多看,看优秀的demo,下面的故事从一个结构体开始,这个结构体选自Linux3.5版本,在/include/linux/sched.h里面,
==========================正文========================
该结构体长360行,这么大的结构体到底在描述什么?下面我们一起来走进这个结构体,看看这个结构体到底在做什么?
从操作系统的角度来看,每一个运行的程序都可以视为一个进程,我们知道,在计算机中可以同时运行很多的进程,这些进程彼此运行互不干扰,但是计算机的资源是有限的呀(寄存器,内存)操作系统是怎么做到进程间的相安无事呢?
这是因为操作系统在创建每个进程的同时,还会为每个进程创建一个进程控制块——简称PCB,这个PCB中定义了一切和该进程相关的信息,一个PCB对应一个进程,一个进程对应一个PCB,我们在谈论进程的同时就可以说是在谈论PCB。
进程有几个状态,在不同的操作系统下面对进程描述略微有区别,但是大概对进程的描述可以是下面四种:起始态,就绪态,运行态,等待态。每个态下面都对应一个队列,让PCB在这些态中来回的切换。这样就实现了,我在电脑上可以听着音乐写着论坛的效果啦。
下面的代码很长,读者看看中文注释即可,感兴趣的可以详细了解其他的部分。
那么有很多小伙伴可能就有疑问了,这么大的结构体访问起来岂不是很麻烦?
没错这个结构体在访问的时候,不是常规的指针的访问形式,这样很慢,他是结构体首地址加上偏移量的形式进行访问。所以每个量的位置不可以随便移动。
老九学堂会员出品
作者:快乐的镜子
原文:https://www.cnblogs.com/ljxt/p/11579845.html