OS笔记1 进程与线程

前言

操作系统浩如烟海,而进程是OS中相当重要的一个概念,在阅读了lqm老师的进程控制的pdf之后,我打算进行一些自我总结与提炼,若有笔误,恳请指正。

进程的基本概念

进程的属性

一个进程含有多个属性,进程在linux系统中有一个结构体的定义,而这个结构体里包含了很多属性,主要有:

  • 进程控制块 PCBtask_tsruct )( 在内核空间中 )(线程也有PCB!
  • 内存描述符 mm_struct (包含内存布局和相应的页表信息)
  • 用户台堆栈 vm_area_struct
  • 函数调用栈

内存模型的中的进程映像

操作系统把磁盘上可执行文件加载到内存运行之前, 需要做很多工作, 其中很重要的一件事就是把可执行文件中的代码, 数据存放到内存 中合适的位置, 并分配和初始化程序运行过程中必须的堆栈, 所有准备工作完成之后操作系统才会调度程序起来运行

每个进程都有自己独立的地址空间(虚拟内存)

下图为内存模型中一个进程的映像,左边为低地址,主要为可执行文件的数据部分,用户进程高端位置建立了一个用户态的堆栈(stack),右边为高地址,主要为一些管理的数据结构
在这里插入图片描述
在这里插入图片描述

线程的基本概念

  • 进程控制块 PCBtask_struct
  • 线程堆栈

进程间的组织关系

终端:就是terminal,就是一个计算机输入输出的设备,可以理解为你远程登录所弹出来的那个黑框框,而会话就是终端当前的状态,一个终端只能有一个会话(session)!

会话:不同用户或者同一用户的多次登录,为一个会话

在linux系统中,一个会话包含多个进程组,而一个进程组包含多个线程组
在这里插入图片描述

在这里插入图片描述

进程与线程

自从引入了进程这个概念之后,进程的任务就给分割了

  • 进程 : 资源分配的基本单位
  • 线程 : 处理机调度的基本单位

一个进程中可以包含多个线程,这些线程之间共享相同的进程资源

每个线程各自保留少量的资源,这些资源可以用于区分不同的线程(执行流)

  • 程序指针 IP
  • 函数调用栈
  • 进程控制块 PCB

下面是一个多进程、多线程并发的地址空间示意图

假设我们有一块物理内存,和两个可执行程序ELF-file-x.exe 和 ELF-file-y.exe

我们知道,每个进程都有自己独立的地址空间,也就是自己的虚拟内存,而虚拟内存是通过一个多级页表与物理内存建立映射关系的
虚 拟 内 存 ( 用 户 空 间 + 内 核 空 间 ) → 物 理 内 存 虚拟内存 (用户空间 + 内核空间) → 物理内存 (+)

对于程序ELF-file-y,其有两个进程 P1 和 P2,其中P2进程包含两个线程P2-0和P2-1

对于程序ELF-file-x,其有一个进程 P0

对于每个进程,它们的内核空间是相同的(只不过画了很多个),每个进程或线程在内核空间中都会有自己的进程控制块task_struct,但是只有进程才会有内存描述符mm_struct描述的进程内存布局和相应的页表(这是因为进程有自己独立的内存空间)

任何一个进程进入它的内核空间,都可以访问到其他进程的进程控制块task_struct 和 内存描述符 mm_struct

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值