多线程1.

多线程1

1.如果想对地址空间的堆区做更细腻化的空间管理,怎么办?
搞一个vim_area_struct,他是一个双向链表。每一个节点是一块堆区空间,用链表串起来。
在这里插入图片描述

2.如何管理物理内存?
设定一个数据结构,如,struct page {int flag}; 假如物理内存有4g,每一个结构体为4KB,则变成 struct page mem[100w+],这样对物理内存的管理就变成了对特定数据结构的管理了。
在这里插入图片描述

3.io的基本单位是4KB?
IO的过程是将磁盘的4KB页帧加载到内存的页框,也是4KB。

4.代码的执行流程是什么样的?从虚拟地址和物理内存角度回答? 缺页中断是什么?
第一步代码区的代码通过用户级页表,指向磁盘中的位置,如果此时用户级页表中的标记位显示物理内存没有对应代码位置,则调用io操作,将代码加载到内存中,并将内存中的位置返回到用户级页表的框框里。
在这里插入图片描述
5.地址空间如何映射到物理内存? 页表角度简述
通过两个页表,第一级页表有1024个kv映射关系, v存储的是第二级页表的地址,第二级页表v映射的是物理内存每一个4KB的起始地点,这样一来就可以通过 page start addr + 页内偏移(剩余的12个比特位)取到物理内存。 而两级页表这样设计,既能满足映射关系,又能节省很多内存存储页表的空间。
在这里插入图片描述
6.线程和进程的关系?
线程在进程内部执行,如图 图中的每一个task_struct都可称之为线程,共享同一个进程的不同资源。
线程是OS调度的基本单位
进程是承担系统资源分配的基本实体
在这里插入图片描述

7.Linux和window中的线程有什么区别?
Linux中的线程操作方式,数据结构等等基本和进程一样,巧妙的复用了
window中的线程则是重新设计了一套线程操作方式和数据结构。

8.从用户角度和内核角度说说什么叫进程?
用户角度:进程即是内核数据(地址空间 页表 PCB等等) + 代码和数据
内核角度:进程是承担分配系统资源的基本实体
在这里插入图片描述

9.什么是PCB?
操作系统为了描述进程的信息的一个结构体,Linux里叫task_struct。

10.task_struct是什么?
进程内部的一个执行流。

11.为什么Linux被称之为轻量化进程?
因为线程和进程复用,Linux下的PCB小于等于 其他OS的PCB。

12.如果用户要在Linux中创建线程怎么办?
Linux下是没有真正意义上的线程的,是用进程PCB模拟线程的,所以Linux并不直接提供线程的接口,而是在用户层实现了一套多线程方案,以库的方式即,pthread线程库–原生线程库供用户创建多线程。

13.pthread_creat函数的调用?
该函数的
第一个参数是,线程ID的地址即&tid
第二个参数是,线程的属性,暂时设为nullptr
第三个参数是,函数指针
第四个参数是,回调参数,给到函数指针*thpreadRun中的args。
在这里插入图片描述

14.如何在系统中查看线程的pid?
其中第一行mythread是主线程 因为pid = lwp =24268
在这里插入图片描述
15.线程是如何看待进程中的资源的呢?
线程独自占有的资源有 一组寄存器 栈空间 erron 等等
一起共享的有堆空间(可以将堆地址全局定义) 代码 未初始化和初始化数据 文件描述符等等

16.为什么线程的创建调度的代价比进程小得多?
第一个原因是,线程的创建调度不需要切换地址空间和页表
第二个原因是,CPU中有硬件级内存,根据局部性原理,当线程进行调度的时候,无需再向内存拿信息。而当进程进行调度的时候,由于进程的独立性,当切换的时候,CPU中的硬件级内存cache就失效了,需要重新往内存中拿取相应的信息,所以代价比线程的调度大得多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值