前言:在了解完冯诺依曼体系结构和操作系统之后,我们进入了Linux的下一篇章Linux进程,但在学习Linux进程之前,一定要阅读理解上一篇内容,理解“先描述,再组织”才能更好的理解进程的含义。...Linux进程学习基础 本篇主要内容: 进程的概念 通过系统调用获取进程标示符 1....而这个又操作系统产生控制进程的结构就是PCB PCB: 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。...课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct 1.2 CPU对于进程列表的处理 在CPU对进程列表进行处理时,PCB中的数据有时不会被...:ps ajx | head -1 && ps ajx | grep 可执行程序 2.2 终止进程 在我们刚接触Linux时,通常按CTRL+c可以结束进程,现在在学习Linux进程时,还有一种方法可以杀死进程
本篇文章将深入剖析Linux中的进程管理机制,重点讲解进程控制块(PCB)的结构和作用,帮助读者理解操作系统的运行原理。 一、进程的基本概念 进程是操作系统中最重要的基本概念之一。...在Linux操作系统中,PCB通过task_struct结构体实现。每个进程的task_struct对象会存储在内存中,由操作系统管理。 2.2 PCB的核心地位 PCB是进程管理的核心。...2.3 PCB的组织结构 为了有效管理系统中大量的进程,操作系统通过将PCB组织成一个链表结构来管理。在Linux内核中: 每个进程的task_struct对象是链表中的一个节点。...三、Linux环境下的进程 3.1 task_struct结构体 task_struct是Linux系统中用于描述PCB的结构体,定义在Linux内核代码中。...结语 通过本文的讲解,我们可以清晰地看到,Linux系统中进程的管理是通过PCB(task_struct)这一核心数据结构来实现的。
进一步的说,正是对系统调用函数进行了封装,才使诸如C语言,C++等各种编程语言具有了跨平台性,我上层同样都是调用printf函数,在linux操作系统下我就去调用linux下的系统调用函数(封装在C标准库...所以,操作系统在加载可执行程序形成进程的同时,会创建一个描述该进程的结构体,称为PCB(process control block,进程控制块),linux操作系统下称之为task_struct。...此后,操作系统对于进程的管理,就转换成了对于PCB链表的增删查改。进一步的,我们可以了解到,进程就等于内核数据结构加可执行程序。...未来,所有对进程的操作和控制,都只和进程的PCB有关,和进程的可执行程序没有关系。 PCB的大致属性信息 标示符: 描述本进程的唯一标示符,用来区别其他进程。...三、查看进程 ps axj:在Linux系统中用于查看关于进程的更多信息 其中pid就是进程对应的标识符,ppid就是进程的父进程对应的标识符 ps ajx | head -1 && ps ajx |
描述进程-PCB(process control block) 其实我们上面已经见过PCB了,就是我们上面创建的结构体,在操作系统中所有表示进程的都叫PCB,而这个结构体叫做进程控制块...PCB即task_ struct对象呢?...PCB做管理 2.1 task_ struct Linux中进程控制块PCB-------task_struct结构体结构 - 童嫣 - 博客园 https://www.cnblogs.com/...在Linux中描述进程的结构体叫做task_struct 2. task_struct是Linux内核的⼀种数据结构,它会被装载到RAM(内存)⾥并且包含着进程的信息 2.2 task_...其他信息 2.3 组织进程 所有运⾏在系统⾥的进程都以task_struct链表的形式存在内核里 在linux内核中, 最基本的组织进程task_struct的方式, 是采用双向链表进行组织的
2.为什么要有PCB?(先描述,再组织) 因为操作系统要管理进程,管理系统之前就必须对进程进行描述。 3.命令也是一个进程,过滤查看的时候能查到。 4.让程序运行起来,本质就是启动了一个进程。...9.Linux进程时树形结构。 1.基本概念: 进程的概念 进程的概念 课本概念 程序的一种执行实例,正在执行的程序。 内核观念 担当分配系统资源的实体(CPU,内存)。...PCB的概念: 进程信息会放到一个叫进程控制块的数据结构中,可以理解为进程属性的集合。包含进程的属性。 在Linux操作系统中的PCB是task_struct。...每一个进程都会有一个PCB进行管理。 进程=PCB(task_struct)+代码和数据。...PCB(Process Control Block) Linux最早版本的task_struct有那些属性: 查看进程的信息: 方法一: ps ajx | grep (进程名):查看此时进程信息。
这次带来的是Linux系统中关于进程这部分的一些知识点,如果对你有所帮助的话,可否留下你宝贵的三连呢? 个 人 主 页: 默|笙 一....描述进程-PCB 进程 = 程序(代码 + 数据)+ PCB PCB是一个叫做进程数据块的数据结构,它存储着一个进程里面所有的属性,类似这个进程的身份证。...在Linux系统里面PCB是一个结构体,也就是接下来所要讲的task_struct这个结构体。所有运行中的进程都以task_struct双链表的形式存在于内核里。 PCB !...1.3 上下文数据 在进程运行时对应的PCB里面的数据不是实时更新的,像上下文数据只会在上下文切换时才会保存。...在Linux系统中,一个新的进程往往是通过父进程产生的。 3.我们可以看到test.c的父进程PID也就是PPID是17348,那这个17348究竟是哪个进程?我们来看看。
在一个进程诞生时,为了方便管理,每一个进程都会有一个“名字”------进程pid。 进程PCB 操作系统需要同时处理多个进程,如何有效管理这些进程呢?...在Linux系统中,这个管理进程的结构体通常称为task_struct,它包含了描述一个进程运行状态所需的所有信息。...值得注意的是,操作系统本身是一个具有最高优先级的特殊进程,它负责管理其他所有进程,因此总是最先被加载到内存中运行。一个进程=进程PCB+自己的代码和数据。...(PCB)中;cwd(Current Working Directory,当前工作目录)是每个进程运行时的一项重要属性,它决定了相对路径的解析基准 —— 当我们使用....在程序运行时删除process可执行文件,程序还能继续运行,与进程有关的代码和数据在创建PCB时被拷贝到内存中了,但是运行结束之后无法再次运行,磁盘上没有这个可执行程序了,内存上的也在运行结束后被释放了
下面先来看看sys_fork执行完后的代码 将当前线程PCB赋值给eax 判断PCB的状态是否为0,在linux 0.11中,0是就绪状态,而非0是阻塞状态 如果调用了相关sys_read和...难点分析 参考: Linux0.11内核–进程的调度schedule和switch_to解析 任务状态段TSS及TSS描述符、局部描述符表LDT及LDT描述符 Linux 0.11用tss切换,但也可以...首先,新创建的内核级线程的内核栈使用的是上面申请的PCB内存中的一部分: 对于申请的空闲页来说,下面是PCB内存,上面是内核栈 tss.ss0指向的是内核数据段 ---- 对于用户栈来说...首先,将当前父进程的eip和cs放在tss中,说明子进程一会如果执行的话,会从父进程在中断进入内核态时,压入栈中的eip和cs处开始执行 然后eax设置为了0,这一点很重要 因为linux 0.11...hello程序了 ---- 小结 Linux 0.11的TSS方式: 对于TSS方式完成内核线程的切换而言,主要通过一条长跳转指令,通过将CPU状态拍到老进程的TSS上,而将新进程的TSS拍到当前
这一篇大致说一下进程的创建,有兴趣的可以参考之前的一些文章或者直接上代码https://github.com/theanarkh/read-linux-0.11。 系统有一个GDT表。...我们知道,通过fork可以创建一个进程。下面我们来看一下fork的过程都做了什么事情。先通过find_empty_process获取一个可用的进程id和pcb。pid是进程id。...pcb是管理进程的结构体。...p) return -EAGAIN; // 挂载到全局pcb数组 task[nr] = p; // 复制当前进程的数据 *p = *current; /...在这里插入图片描述 进程创建的本质就是申请一个新的pcb,里面保存了该进程的相关信息,假设现在轮到该进程执行。系统会根据tss选择子到gdt表中找到tss结构体的地址。
通俗解释进程-科学家做蛋糕 科学家做蛋糕 然后女儿被蜜蜂蛰了 进程表–在内核 内存管理 经典 老式 管理方法: 基址寄存器(程序开始的地方) + 界限寄存器(程序长度) 空闲内存管理...每个页框有一个编号,即“页框号”(页框号=页帧号=内存块号=物理块号=物理页号),页框号从0开始 将进程的逻辑地址空间也分为与页框大小相等的一个个部分,每个部分称为一个“页”或“页面”。...操作系统以页框为单位为各个进程分配内存空间。进程的每个页面分别放入一个页框中。也就是说,进程的页面与内存的页框有一一对应的关系。 各个页面不必连续存放,可以放到不相邻的各个页框中。...重要的数据结构——页表 为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表。...注:页表通常存在PCB中 一个进程对应一张页表 进程的每个页面对应一个页表项 每个页表项由“页号”和“块号”组成 页表记录进程页面和实际存放的内存块之间的映射关系
2、进程 2.1 PCB和进程ID 进程是程序的一个执行实例,是担当分配系统资源(CPU时间,内存)的实体。 进程 = 内核数据结构 + 程序的代码和数据。...把程序运行起来,本质就是在系统中启动了一个进程。进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。Linux操作系统下的PCB是task_struct。...多个进程在多个CPU下同时运行,叫做并行。 2、时间片 Linux、Windows等民用级别的操作系统,通常都是分时操作系统,它的特点是追求调用任务的公平性。...{ if (bit_map[i] == 0) continue; else { //在32个比特位中详细确定哪一个队列 } } 上面的代码可以保证检索队列在常数范围,这种调度算法就是Linux...进程具有独立性,但进程间可以通过环境变量进程数据传递(一般是只读数据)。 2.6 进程虚拟地址空间 所谓的进程虚拟地址空间,本质上是一个内核数据结构对象(类似PCB)。
在保护模式下,段寄存器保存的是段选择子,当进程被系统选中执行时,会把tss和ldt等信息加载到寄存器中,tss是保存进程上下文的,ldt是保存进程代码和数据段的首地址偏移以及权限等信息的。...long eflags,long esp,long ss) { struct task_struct *p; int i; struct file *f; // 申请一页存pcb...p) return -EAGAIN; // 挂载到全局pcb数组 task[nr] = p; // 复制当前进程的数据 *p = *current; /...#define switch_to(n) {\ struct {long a,b;} __tmp; \ // ecx是第n个进程对应的pcb首地址,判断切换的下一个进程是不是就是当前执行的进程,是就不需要切换了...最后根据tss中的cs和ip执行进程。这就是文章开头的过程。这就是linux0.11版本中进程地址管理的实现。下面是fork后的结构图。 ?
init()函数中,便是用来调用linux的shell脚本程序,从而可以与用户进行交互。那么问题来了,fork是如何做到进程的创建的呢?系统如何让两个进程或多个进程并发的执行呢?...所以,通过上述总结,进程调度的实现原理就是在线程调度的基础上,加上了内核栈与用户栈的关联步骤,并且在内核态进行两个栈的切换,即PCB的切换。来分析代码咯!...该函数的主要作用是: 创建新的PCB,并且给该进程控制块分配新的物理内存 初始化PCB的内容,并且将父进程的内核栈信息全部复制给子进程的内核栈。 函数成功调用后,最终返回系统进程调用号。...代码分析: 将任务n的tss描述赋值给edx寄存器 将edx寄存器的低16位内容,传给临时变量tmp.b 执行长跳转ljmp,ljmp可分为两步: 将寄存器的内容写入当前进程的tss当中去,并且把原...还记得fork出p->tss.eax为什么等于0了嘛,此时切换的子进程tss.eax=0,那就意味着swicth_to后,cpu寄存器的eax=0,那么等中断返回后,!fork()条件就变成了真!
pcb地址赋值给eax movl _current,%eax // 判断当前进程状态,0是可执行,即判断当前进程是否可以继续执行 cmpl $0,state(%eax)...p) return -EAGAIN; // 挂载到全局pcb数组 task[nr] = p; // 复制当前进程的数据 *p = *current; /...,即if (__res >= 0) p->tss.eip = eip; p->tss.eflags = eflags; // 子进程从fork返回的是0,eax会赋值给__res...tss信息中的ldt索引首先从gdt找到进程ldt 结构体数据的首地址,然后根据当前段的属性,比如代码段, 则从cs中取得选择子,系统从ldt表中取得进程线性空间 的首地址、限长...和ldt地址到gdt,nr 进程距离第一个tss描述符地址的偏移, 单位是8个字节,即选择描述符大小 */ set_tss_desc
在Linux中,每个用户都有一个唯一的 UID,用于控制访问权限和资源管理。 这里可以看到myprocess这个进程是由UID是1000的用户启动的。...原码,内部有一个结构体是tss,我们来看看tss结构体: struct tss_struct { unsigned short back_link,__blh; unsigned long esp0...总结 在 Linux 操作系统中,进程优先级和进程切换是确保系统高效运行的核心机制。通过合理设置进程优先级,系统能够根据任务的重要性和紧急性,合理分配 CPU 资源。...同时,进程切换的实现方式保证了多任务环境下的平稳运行。尽管频繁的进程切换可能会带来一定的性能开销,但通过调度算法的优化,Linux 仍能在保持高效性的同时,确保各个进程得到公平的执行机会。...了解这些概念不仅有助于深入掌握 Linux 系统的工作原理,还能为优化应用程序性能提供指导。希望本文能为你在 Linux 进程管理方面的学习和实践提供一些启发。
注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程中的一些概念性问题...Linux 中处于等待状态的进程分为两种:可中断的等待状态和不可中断的等待状态。...在Linux 系统中,除了初始化进程init,其他进程都有一个父进程(Parent Process)。...进程是Linux 内核建立起来后人为创建的一个进程,是所有进程的祖先进程)。...二、进程组织方式 1、内核栈 每个进程都有自己的内核栈,当进程从用户态进入内核态时,CPU 就自动地设置该进程的内核栈,也就是说,CPU 从任务状态段TSS 中装入内核栈指针esp,在/include
如通用寄存器、程序计数器PC、指令寄存器IR、累加器ACC等)保存到该进程的进程控制块(PCB)中。...恢复下一个进程的上下文: 寄存器恢复:将下一个进程的寄存器内容从其PCB中恢复到CPU的寄存器中。 状态信息恢复:恢复下一个进程的状态信息。...tss; /* 任务状态段结构体,保存进程的上下文数据 */ }; tss_struct 结构体 tss_struct 是任务状态段的数据结构,用于保存进程的上下文信息,以便在进程切换时恢复。...Linux2.6内核进程O(1)调度队列 进程切换现在知道了,但是是如何进行调度的呢? 上图展示了Linux 2.6内核中进程队列的数据结构,下图用图示清晰地呈现了各组件间的关联关系,以便于理解。...进程优先级: 普通进程的优先级范围在 100 至 139 之间。在 Linux 系统中,与 nice 值相关联,nice 值越小,进程优先级越高。
前言: 上文我们讲到了操作系统与Linux中进程的状态【Linux】进程状态-CSDN博客 本文我们来讲进程的优先级、以及进程的切换 进程优先级 什么是优先级?...CPU中资源是有限的,而进程的数量一定是远大于CPU资源的,所以优先级是进程得到CPU资源的先后顺序。优先级也是进程的属性之一,保存在PCB中。...优先级的实现 优先级是进程的属性之一,保存在PCB中。 优先级中PCB中用整型表示,其值越小表示优先级越高,反之优先级越低。 优先级是可以被修改的。...如上图,我在Linux中使用执行查看当前正在运行的进程信息。...保存到了进程task_struct的TSS中(TSS:任务状态段),下一次执行时,之间覆盖CPU中的寄存器内容即可。
已知进程是在时间片的限制下进行执行,所以在当前时间片结束后,CPU中的存放着当前运行程序的寄存器的所有数据就会在当前PCB的task_struct中tss_struct里面拷贝数据,在该进程下次被运行的时候就会将...当然tss_struct也有关于当前进程是否结束,是否需要将寄存器数据拷贝等信息,避免资源浪费。 tss_struct源码: 以下是kernel 0.11中task_struct的代码。...其中绿色框所圈部分即为tss_struct。 上图即为tss_struct中的成员变量,对应各个寄存器。...内核(Linux2.6)进程O(1)调度队列 分时操作系统和实时操作系统的基本概念和区别 分时操作系统 分时操作系统(...下图为Linux2.6内核中进程队列的数据结构。
如果对前面Linux进程不太熟悉可以先阅读: Linux进程 本篇主要内容: 僵尸进程和孤儿进程 Linux进程优先级 1. 僵尸进程 僵尸进程就是处于僵尸状态下的进程!...因此我们可以知道:当进程退出但是还没被读取退出信息时处于僵尸状态 PCB释放: 当一个进程在退出的时候,退出信息会由OS写入到当前退出进程的PCB中,可以允许进程的代码和数据空间被释放,但是不能允许进程的...PCB被立即释放 要让OS或者父进程读取到退出进程的PCB中的退出信息,得知子进程的退出原因,才能释放PCB!...开个玩笑,孤儿进程是父进程在子进程退出之前就先退出了,此时的子进程就称为“孤儿进程” 但是前面刚刚讲过一个进程在死亡时,PCB的死亡信息必须被读取后,才会释放PCB,但是如果父进程已经退出了,子进程的...总结 本篇文章前部分紧贴上篇Linux进程,分析完了Linux下常见的进程状态,然后初步了解了Linux进程优先级,而进程优先级与前面内容相差较大,希望大家能够多花点时间理解!