------------恢复内容开始------------
- 如何看待地址空间和页表
- 地址空间是进程看到的资源窗口
- 页表决定,进程真正拥有资源的情况
- 合理的对地址空间+页表进行资源划分,我们就可以对一个进程所有的资源进行分类
-
以4kb为单位来存储。
需要12个比特位来表示这个4kb的偏移量
页目录中使用了地址中前10位,然后页表中使用了10位,然后使用剩下的12位虚拟地址+页框中的起始地址 -
我们可以通过地址空间+页表方式对进程进行资源划分,单个“进程”执行粒度,一定要比之前的进程要细
-
在windows是真的有线程和进程的区别,但是linux中是使用同一种方式实现的。
-
什么叫进程?内核视角:承担分配系统资源的实体。
一个进程内部会有多个执行流。 -
线程是:cpu调度的基本单位。
-
linux内核中没有真正意义上的线程,linux是用进程pcb来模拟线程的,是一种完全属于自己的一套线程方案。
-
站在cpu的视角,每一个pcb,都可以称为轻量级进程
-
linux线程是cpu调度的基本单位,而进程是承担系统资源的基本单位
-
进程用来整体申请资源,线程用来伸手向进程要资源
-
Linux中没有真正的线程:
- 优点:可靠高效
-
os只认线程,用户(程序员)也只认线程
linux无法提供创建线程的系统调用接口,只能给我们提供创建轻量级进程的接口
所以会有thread库,来解决中间的问题 -
轻量级进程id:
-
CPU调度的时候,是以lwp的这个表示一个特定的执行流。
-
一个线程如果出现了异常,也会影响到其他的线程的。(健壮性和鲁棒性比较差)。进程信号,信号是整体发给进程的。
如果出错了,系统会找到这pid,然后吧这个进程都关闭了,那么其他线程就会一起被关闭, -
线程传递有一种错误是
传递了一个临时变量的char 数组。那么在下一次循环的时候,这个变量是在缓冲区,会被覆盖掉。 -
如果线程内先需要,
-
对于函数内定义的变量,都叫做局部变量,具有临时性 -- 今天仍然适用 --在多线程的情况下也是,每个线程都有自己的独立的栈结构
-
任何一个执行流调用exit都会整个进程退出。
- pthread_exit()
- return
-
需要经可能的让多个线程交叉执行
多个线程交叉执行本质:就是让调度器尽可能的频繁发生线程调度与切换
线程一般在时间片到了,来了更高优先级的线程,线程等待的时候
线程从内核态返回用户态的时候,线程要对调度状态进行检测,如果可以,就直接发生线程切换 -
我们定义的全局变量,在没有保护的时候,往往是不安全的,像多个线程在交叉执行造成的数据安全问题,发生了数据不一致的问题。
-
提出方案:加锁
- 多个执行流进行安全访问的共享资源-临界资源
- 多个执行流中,访问临界资源的代码,--临界区
- 想要多个线程串行访问共享资源 --互斥
- 对一个资源进行访问的时候,要么不做,要么做完 --原子性
------------恢复内容结束------------
标签:--,线程,页表,linux,进程,资源 From: https://www.cnblogs.com/zhudachang/p/18473969