![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
进程
文章平均质量分 77
superkiss2
这个作者很懒,什么都没留下…
展开
-
linux 2.6源代码情景分析笔记之进程2
能被独立调度的每个执行上下文都必须拥有自己的进程描述符。进程和进程描述符之间有严格的对应关系,使用32位进程描述符地址标识,进程描述符指针指向这些地址,内核对进程的大部分引用是通过进程描述符指针进行的。可以使用pid(进程标识符)来标记进程,存放在字段pid中,PID被顺序编号,新创建的进程PID通常是前一个进程的PID加一。#define PID_MAX_DEFAULT 0x8000原创 2009-12-25 02:55:00 · 825 阅读 · 0 评论 -
linux 2.6源代码情景分析笔记之进程11
下函数,创建进程描述符以及子进程执行所需要的所有其他数据结构。参数与do_fork()的参数相同,外加子进程的pid。static task_t *copy_process(unsigned long clone_flags,unsigned long stack_start,struct pt_regs *regs,unsigned long stack_size,int __user *p原创 2009-12-29 13:13:00 · 657 阅读 · 0 评论 -
linux 2.6源代码情景分析笔记之进程9
intel在他的微处理器中引入一个新的汇编指令集,叫做MMX指令,用来加速多媒体应用程序的执行。mmx指令作用于fpu的浮点寄存器。80x86微处理器并不在tss中自动保存fpu,mmx,xmm寄存器。他们包含某种硬件支持,能在需要时保存这些寄存器的数值,硬件支持由cr0寄存器中的一个ts标志组成。遵循以下规则:每当执行硬件上下文切换时,设置ts标志。每当ts标志被设置时执行ESCAP原创 2009-12-29 06:40:00 · 661 阅读 · 0 评论 -
linux 2.6源代码情景分析笔记之进程10
几点注意:1.写时复制技术允许父子进程读相同的物理页。只要两者中有一个试图写一个物理页,内核就把这个页的内容拷贝到一个新的物理页,并把这个新的物理页分配给正在写的进程。2.轻量级进程允许父子进程共享每进程在内核的很多数据结构。3.vfork()系统调用创建的进程能共享其父进程的内存地址空间。为了防止父进程重写子进程需要的数据,阻塞父进程的执行,一直到子进程退出或执行一个新的程序为止。原创 2009-12-29 09:23:00 · 614 阅读 · 0 评论 -
linux 2.6源代码情景分析笔记之进程7
为了控制进程执行,内核必须有能力挂起正在cpu上运行的进程,并恢复以前挂起的某个进程的执行(进程切换、任务切换、上下文切换)。每个进程可以拥有自己的地址空间,但所有进程必须共享cpu寄存器。在恢复一个进程的执行之前,内核必须确保每个寄存器装入了挂起进程时的数值。进程恢复执行前必须装入寄存器的一组数据成为硬件上下文(hardware context)。硬件上下文是进程可执行上下文的一个子集,原创 2009-12-29 00:42:00 · 744 阅读 · 0 评论 -
linux 2.6源代码情景分析笔记之进程6
每个进程都有一组相关的资源限制(resource limit),限制了指定进程能使用的系统资源数量。对当前进程的资源限制存放在current->signal->rlim字段,进程的信号描述符的一个字段。该字段类型为rlimit结构的数组,每个资源限制对应一个元素。struct rlimit { unsigned long rlim_cur; unsi原创 2009-12-28 07:53:00 · 805 阅读 · 0 评论 -
linux 2.6源代码情景分析笔记之进程5
等待队列在内核中很多用途,尤其用在中断处理、进程同步及定时。等待队列实现了在事件上的条件等待:希望等待特定事件的进程把自己放进合适的等待队列,并放弃控制权。因此,等待队列表示一组睡眠的进程,当某一条件变为真时,由内核唤醒它们。等待队列由双向链表实现,其元素包括指向进程描述符的指针。每个队列都有一个等待队列头,等待队列头是一个类型为wait_queue_head_t的数据结构。struc原创 2009-12-28 07:22:00 · 637 阅读 · 0 评论 -
linux 2.6源代码情景分析笔记之进程4
散列(hash)函数并不总能确保pid与表索引一一对应。两个不同的pid散列到相同的表索引称为冲突(colliding),linux利用链表来处理冲突的pid,每一个表项是由冲突的进程描述符组成的双向链表。pid散列表的数据结构解决了所有这些难题,他们可以为包含在一个散列表中的任何pid号定义进程链表。最主要的数据结构是四个pid结构的数组,它在进程描述符的pid字段中。struc原创 2009-12-28 06:26:00 · 987 阅读 · 0 评论 -
linux 2.6源代码情景分析笔记之进程3
为内核寻找新进程在cpu上运行时,必须只考虑可运行进程(TASK_RUNNING)。提高调度程序运行速度的诀窍是建立多个可运行进程链表,每种进程优先权对应一个不同的链表。每个task_struct描述符包含一个list_head类型的字段run_list。如果进程的优先权等于k(0-139),run_list字段把该进程链入优先权为k的可运行进程的链表中。内核必须为系统中每个运行队列保存大原创 2009-12-28 05:54:00 · 1352 阅读 · 1 评论 -
linux 2.6源代码情景分析笔记之进程1
进程是程序执行时的一个实例,是充分描述程序已经执行到何种程度的数据结构的汇集。在linux中,常将进程称为任务(task)或者线程(thread)。进程的目的就是承担分配系统资源的实体。当一个进程创建时,几乎与父进程相同。接受父进程地址空间的一个逻辑拷贝,并从进程创建系统调用的下一条指令开始执行与父进程相同的代码。尽管父子进程可以共享含有程序代码的页,但是它们各自有独立的数据拷贝(栈和堆),因原创 2009-12-25 01:59:00 · 568 阅读 · 0 评论 -
linux 2.6源代码情景分析笔记之进程8
内核分两部执行一个进程切换1.切换页全局目录以安装一个新的地址空间;2.切换内核态堆栈和硬件上下文,因为硬件上下文提供了内核执行新进程所需要的所有信息,包含cpu寄存器。切换内核堆栈的硬件上下文是由宏switch_to完成的,此与硬件联系紧密#define switch_to(prev,next,last) do {原创 2009-12-29 02:01:00 · 580 阅读 · 0 评论