文章目录
- 1.进程的概念
- 1.1进程是什么
- 2.进程的描述
- 2.1进程的组成
- 2.2task_struct的内容
- 3.进程地址空间(虚拟地址空间)
- 3.1物理地址空间
- 3.2进程地址空间和物理地址空间的关系
1.进程的概念
1.1进程是什么
从计算机的硬件到软件和用户需要有很多的交互:
硬件是计算机系统的物理部分,包括各种电子器件和机械设备, 例如中央处理器、内存、硬盘、显卡等。这些硬件组件共同构成了计算机系统的硬件基础。
软件是计算机系统的程序集合,它包括操作系统、应用程序、数据库等。软件通过操作系统与硬件进行交互,实现对硬件的控制和操作。计算机硬件和软件是通过操作系统进行交互的。 系统调用是操作系统提供的一种接口,允许应用程序向操作系统请求服务。当应用程序需要访问硬件设备或其他系统资源时,它会通过系统调用将请求传递给操作系统,操作系统会处理请求并返回结果给应用程序。
用户通过计算机硬件和软件提供的接口进行交互, 使用计算机完成各种任务。用户可以通过键盘、鼠标、触摸屏等输入设备向计算机发送指令,计算机通过操作系统和应用程序对这些指令进行处理,并将结果返回给用户。
进程可以将计算机的硬件和软件部分联系起来:
进程是操作系统中进行资源分配的最小单位,它可以将计算机系统的硬件和软件联系起来。进程在运行时,需要从硬件获取资源,例如CPU、内存、磁盘等,同时也会通过操作系统与硬件进行交互,实现对硬件的控制和操作。因此,进程在计算机系统中扮演着重要的角色,它是联系硬件和软件的桥梁。
计算机管理硬件有两步:
(1)先描述,用struct结构体;
(2)再组织,用链表或其他高效的数据结构。
进程的基本概念:
(1)从进程本身看:进程是程序的一个执行实例,是正在执行的程序等。
(2)从进程的内核看:进程担当分配系统资源(CPU时间,内存)的实体,是联系硬件和软件的桥梁。
2.进程的描述
2.1进程的组成
进程=内核数据结构+程序代码数据
其中内核数据结构为:task_struct(PCB)、mm_struct(进程地址空间)、页表
task_struct是Linux内核的一种数据结构,称为PCB(进程控制块),它会被装载到RAM(内存)里并且包含着进程的信息,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,它是进程运行时被加载到RAM中的重要结构体。
mm_struct是Linux内核中描述进程虚拟地址空间的数据结构。每个进程在内核中都有一个唯一的mm_struct结构体,用来描述该进程的虚拟地址空间。 了解:它包含了装入的可执行映像信息以及进程的页表目录指针pgd,还包含有指向vm_area_struct结构的指针,每个vm_area_struct代表进程的一个虚拟地址区间。在进程的task_struct结构体中,有一个指向mm_struct的指针,这个指针常常是mm。
页表是一种特殊的数据结构,用来存储进程地址空间和物理内存地址的映射关系。 页表决定内存地址的意义以及哪些物理内存能够访问。它们允许在同一块物理内存上隔离不同进程的地址空间。页表还间接的为提供了一些手段:在多个地址空间中映射相同的内存地址,通过未分配的页来保护内核和用户栈。
2.2task_struct的内容
(1)标示符: 描述本进程的唯一标示符,用来区别其他进程。
(2)状态: 任务状态,退出代码,退出信号等。
(3)优先级: 相对于其他进程的优先级。
(4)程序计数器: 程序中即将被执行的下一条指令的地址。
(5)内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
(6)上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
(7)I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
(8)记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
3.进程地址空间(虚拟地址空间)
进程地址空间是每个进程在运行时所用到的虚拟地址的集合,由若干个连续的内存块组成。每个进程都有自己的地址空间,这意味着每个进程都有自己的内存地址范围,不会与其他进程冲突。
进程地址空间通常被划分为几个部分,包括代码段、数据段、堆和栈。代码段存储程序代码,数据段存储程序运行时所使用的数据,堆用于动态分配内存,而栈用于存储函数调用时所需的数据(如参数、返回地址和临时变量)。
当进程在执行时,会使用自己的地址空间。进程间通信时,必须通过操作系统提供的机制来实现,因为不同进程之间的地址空间是独立的。
操作系统会给每一个进程都创建一个独立的虚拟地址空间,每个进程的地址空间都是整个内存的大小。操作系统通过页表将虚拟地址空间与物理内存建立映射,实现虚拟内存管理。当需要访问虚拟地址时,操作系统会先通过页表找到对应的物理内存,然后进行访问。
需要注意的是,进程地址空间是虚拟的,不是物理内存。每个进程都有自己独立的地址空间,不同进程的地址空间之间不会相互干扰。
3.1物理地址空间
物理地址空间是计算机中存储数据和执行程序的实际物理内存地址。 它是计算机系统中物理存储器的实体存在,每个进程都拥有自己的物理地址空间。
在32位平台上,每个进程都有自己的虚拟地址空间,大小为2^32字节。然而,实际的物理内存大小可能远远小于虚拟地址空间的大小。操作系统通过内存管理机制将虚拟地址空间映射到物理内存,实现虚拟内存管理。
每个进程的物理地址空间是相互独立的, 不同进程的物理地址空间之间不会相互干扰。进程在访问内存时,操作系统会将虚拟地址转换为物理地址,以实现对物理存储器的访问。
注意:物理地址空间是计算机系统中实际存在的物理存储器的实体存在,不是虚拟的。同时,操作系统通过内存管理机制来保护不同进程的物理地址空间,防止发生越界访问和其他安全问题。
3.2进程地址空间和物理地址空间的关系
进程地址空间和物理地址空间之间存在映射关系。
进程地址空间是每个进程在计算机内存中所占用的虚拟地址空间,是进程运行时所用到的虚拟地址的集合。 每个进程都有自己的地址空间,不同进程的地址空间之间不会相互干扰。进程地址空间通常被划分为几个部分,包括代码段、数据段、堆和栈。这些部分在虚拟地址空间中连续,但在物理内存中可能不连续。
物理地址空间是计算机系统中实际存在的物理存储器的实体存在,是实际使用的内存地址。 物理地址空间是连续的,因为计算机的存储器是连续的。
进程地址空间与物理地址空间之间存在着映射关系。操作系统通过内存管理机制将虚拟地址空间映射到物理内存,实现虚拟内存管理。当进程访问虚拟地址时,操作系统会根据页表将虚拟地址转换为物理地址,然后将数据从物理内存中读取出来或写入到物理内存中。 这种映射关系是由操作系统在虚拟到物理之间转化时进行合法性校验来实现的,从而保护了物理内存的安全。
所以:对于同一个变量,地址相同,其实是虚拟地址相同,内容不同其实是被映射到了不同的物理地址。