linux学习之线程

线程概念

  1. 线程是进程内的一个执行分支,是CPU调度的基本单位
  2. 进程是内核数据结构+进程代码和数据

线程理解

  1. 在代码段中,代码在进程中都是串行调用的(不考虑多线程)
  2. 但是进程创建消耗时间和内存,成本高。那么有没有一种方法,可以只创建task_struct,不创建地址空间和页表呢
  3. 如果要设计线程,那么我们的OS也要对线程进行管理。但是Linux因为进程和线程都是执行流,比较相似,所以就用进程来模拟线程,而windows就是分别涉及了数数据结构和算法

在这里插入图片描述4. 我们在调度的时候,不用区分线程和进程,都是执行流。在Linux中,真正在调度的时候,可能是进程也可能是线程。但由于没有具体的线程调度算法。所以,Linux中的执行流是轻量级线程(小于进程,大于线程)

理解地址空间

问题

大家可以想一想:多个执行流是如何在进程地址空间中进行代码划分的?

复习

  1. 内存大部分是以4kb为单位
  2. 动静态库是进行集体编址,以4kb为单位
  3. 磁盘中的可执行程序,写到文件系统里,自然就是4kb

铺垫

  1. 我们一般将内存中4kb的数据块,叫做页框/页帧。这是操作系统进行内存管理的基本单位
  2. 我们想要管理内存中的数据块,创建一个Page结构体。而我们可以创建Page结构体数组,来方便管理

基本结构

  1. 虚拟地址被分为三块。分别是10byte、10byte、12byte
  2. 进程在刚开始加载的时候,不用加载整个页表,只需要根据虚拟地址的第一块来创建页表(一共有1024项,这张表叫做页目录)
  3. 页目录对应的各个二级页表的地址 在查找的时候,先在页目录进行查找
  4. 页表的一个单位是页表项,页表存储的是每一个4kb数据块(也就是页框)的起始地址
  5. 4kb还是太大了,我们要访问4kb中的某个区域,它的地址就是首地址+虚拟地址后十二位(因为2的12次方对应着4kb)这样就能找到每一个地址。虚拟地址的后12位,叫做页内偏移。
  6. 我们还可以在页表中加一些标志位 ,来表示内存数据块是用户用的还是内核用的

结语

下一篇文章会介绍进程控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值