随笔分类 -  Linux内核设计与实现

摘要:内核把进程的列表存放在叫做任务队列(task_list)的双向循环链表中,链表中每一项都是类型为task_struct、称为进程描述符的结构。 进程描述符包含了一个具体进程的所有信息。 进程描述符中包含的数据能完整地描述一个正在进行的程序:它打开的文件、进程的地址空间、挂起的信号、进程的状态,还有其 阅读全文
posted @ 2019-04-10 00:46 使用D 阅读(712) 评论(0) 推荐(0) 编辑
摘要:Unix创建进程分为两个步骤,fork()和exec()。 首先fork()通过拷贝当前进程创建一个子进程,子进程与父进程的区别仅仅在于PID(每个进程唯一)、PPID(父进程的进程号,子进程将其设置为被拷贝进程的PID)和某些资源和统计量(例如挂起信号、它没有必要被继承)。 exec()函数负责读 阅读全文
posted @ 2019-04-09 01:20 使用D 阅读(300) 评论(0) 推荐(0) 编辑
摘要:6.1链表 链表表示一种存放和操作的可变数据元素的数据结构。 链表与静态数组不同的是它包含的元素是动态创建并且插入链表的,在编译时不必知道具体需要多少个元素。 另外链表中每个元素的创建时间各不相同,所以它们在内存中无需占用连续的空间。 链表中每个元素都包含指向下一元素的指针,当有新元素加入链表时,可 阅读全文
posted @ 2019-03-22 00:38 使用D 阅读(321) 评论(0) 推荐(0) 编辑
摘要:10.1 原子操作 同步方法中的原子操作是其他同步方法的基石; 原子操作可以保证指令以原子的方式执行 执行过程不被打断。 原子操作可以把读取和增加变量的行为包含在一个单步中执行,从而防止竞争的发生,保证了操作结果总是一致的; 两个原子操作不可能同时访问同一个变量。 linux内核提供了两组原子操作接 阅读全文
posted @ 2019-03-21 00:02 使用D 阅读(313) 评论(0) 推荐(0) 编辑
摘要:程序员需要留意保护共享资源,防止共享资源禀赋访问,如果多个执行线程同时访问和操作数据,有可能发生各现场之间相互覆盖共享数据的情况,造成被访问数据处于不一致的状态。 Linux内核是抢占式内核,意味着调度程序可以在任何时刻抢占正在运行的内核代码,重新调度其他的进程执行。 9.1 临界区竞争条件 所谓临 阅读全文
posted @ 2019-03-18 23:49 使用D 阅读(335) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示