zoukankan      html  css  js  c++  java
  • linux下的进程控制块和文件描述符

    进程—— 所有的进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
    PCB(process control block),进程控制块,是一个数据结构描述,它是对系统的进程进行管理的重要依据,和进程管理相关的操作无一不用到PCB中的内容。一般情况下,PCB中包含以下内容:
    (1)进程标识符(内部,外部)
    (2)处理机的信息(通用寄存器,指令计数器,PSW,用户的栈指针)。
    (3)进程调度信息(进程状态,进程的优先级,进程调度所需的其它信息,事件)
    (4)进程控制信息(程序的数据的地址,资源清单,进程同步和通信机制,链接指针)
    PCB是为了管理进程设置的一个数据结构。是系统感知进程存在的唯一标志。
    通常包含如以下的信息:
    (1)进程标识符(唯一)
    (2)进程当前状态,通常同一状态的进程会被放到同一个队列;
    (3)进程的程序和数据地址
    (4)进程资源清单。列出所拥有的除CPU以外的资源记录。
    (5)进程优先级。反应进程的紧迫程度
    (6)CPU现场保护区。记录中断时的CPU状态
    (7)进程队列的PCB的链接字。
    (8)进程相关的其他信息。记账用的,如占用CPU多长时间等。
    进程控制块
    每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的
    进程控制块是task_struct结构体。现在我们全面了解⼀一下其中都有哪些信息。
    在Linux中,这个结构叫做task_struct。
    task_struct
    task_struct是Linux内核的⼀一种数据结构,它会被装载到RAM⾥里并且包含着进程的信息。
    每个进程都把它的信息放在 task_struct 这个数据结构⾥里,task_struct 包含了这些内容:
    标示示符 : 描述本进程的唯⼀一标⽰示符,⽤用来区别其他进程。
    状态 :任务状态,退出代码,退出信号等。
    优先级 :相对于其他进程的优先级。
    程序计数器:程序中即将被执⾏行的下一条指令的地址。
    内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
    上下文数据:进程执行时处理器的寄存器中的数据。
    I/O状态信息:包括显⽰示的I/O请求,分配给进程的I/O设备和被进程使⽤用的⽂文件列表。
    记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
    保存进程信息的数据结构叫做 task_struct,并且可以在 include/linux/sched.h ⾥里找到它。
    所有运⾏行在系统⾥里的进程都以 task_struct 链表的形式存在内核⾥里。
    进程的信息可以通过 /proc 系统⽂文件夹查看。要获取PID为400的进程信息,你需要查看 /
    proc/400 这个⽂文件夹。大i多数进程信息同样可以使⽤用top和ps这些⽤用户级⼯工具来获取。

    文件描述符fd(file descriptor)
    内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。

    文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的非负整数。每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。
    文件指针:C语言中使用文件指针做为I/O的句柄。文件指针指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符。而文件描述符是文件描述符表的一个索引,因此从某种意义上说文件指针就是句柄的句柄(在Windows系统上,文件描述符被称作文件句柄)。

    from:https://blog.csdn.net/weixin_43166958/article/details/86578909

  • 相关阅读:
    ASP.NET MVC中你必须知道的13个扩展点
    ASP.NET MVC扩展库
    AutoFac简介
    中小型研发团队架构实践十:应用监控怎么做?
    IDEA+Mybatis-generator代码生成工具
    IDEA+EasyCode实现代码生成
    myeclipse中导入的js文件报错(出现红叉叉,提示语法错误)
    Ibatis中常见错误解决方案
    注解
    structs常见错误
  • 原文地址:https://www.cnblogs.com/lixuejian/p/13517974.html
Copyright © 2011-2022 走看看