mvc 网站路径,珠海seo全网营销,湖北营销型网站建设公司,成都市公园城市建设局网站main 线程常见寄存器#xff08;CR3 EIP IR MMU TLB#xff09;
CR3是当前进程页表物理内存地址#xff08;包不能虚拟地址#xff0c;不然套娃了#xff09;
CPU中有寄存器指向task_struct* current EIP#xff1a;入口虚拟地址 IR#xff1a;当前命令地址系统总线CR3 EIP IR MMU TLB
CR3是当前进程页表物理内存地址包不能虚拟地址不然套娃了
CPU中有寄存器指向task_struct* current EIP入口虚拟地址 IR当前命令地址系统总线CPU与内存之间线路
MMUmemoray manager unit 硬件 虚拟到物理地址转化
为什么不让软件作非要用硬件做虚拟/真实内存地址转换 硬件比软件快
MMU与TLB都在CPU上
物理内存有寄存器 地址被操作物理地址 操作in/out
怎么做到进程资源分给线程 代码如何被划分需要操作系统可以做吗 创建线程时每个线程一个入口函数每个进程天然得到一个函数地址 TLBtranslation lookside buffer 转译后备缓冲区 MMU先向TLB查表没有命中cache miss就到MMU之后反向更新TLB。命中就不用去MMU了 TLB也是个硬件在CPU上 页表存储信息结构2012 页表中不仅存放了真实内存地址还有改page对应的其他信息 页表信息图片 每个页表只要20bite位就能映射4GB物理内存所有pages 剩下12位为对应page信息 linux内核页表代码图片
页表在进程加载时建立 末端页表2012
缺页中断重新理解new 写时拷贝 MMU与TLB都在CPU内其报错后CPU向目标进程发送信号中断
new与malloc 申请虚拟地址空间 用该地址时会缺页中断这是才真正去物理内存申请空间
写时拷贝 原理同上 4KB拷贝
缺页中断进程与空间解耦
如何区分是缺页还是真的越界
线程的优缺点
线程优点 线程重要优点
线程切换不切页表不切上下文cpu寄存器内容不切TLBcache等缓存机制线程间通信比进程简单的多
后四条优点是进程线程共有的
线程缺点 线程主要用途 局部性原理与应用 每个cpu有cachecpu与内存之间的缓冲区先访问cachemiss的话再去物理内存访问数据
cacheTLB等缓冲区原理本质是预加载。访问一地址大概率会访问其周围地址数据 Linux 进程 vs 线程
进程资源分配最小单位 线程调度的基本单位 进程和线程
线程的独立资源 进程的多个线程共享 POXIS接口使用
这些借口不是系统调用是库函数要包含头文件pthread.h链接时要-lpthread链接库
pthread_creat TIPS
一个线程有问题整个进程都会退出线程是进程一部分当然该进程所有其他线程也会退出 函数地址在栈上吗 不在在代码区
线程是一个进程内部的控制序列
一个cpu中 运算器可以好几组 控制器只一组 32位机器两级页表 64位机器三级页表 每一种设备都有寄存器如 内存/硬盘等 code
#include iostream
#include string
#include cstdio
#include cstring
#include unistd.h
#include thread// void *routine(void *args)
// {
// std::string name static_castconst char *(args);
// while (true)
// {
// std::cout 我是新线程,我的名字是: name std::endl;
// sleep(1);
// }
// return 0;
// }int main()
{std::thread t([](){while (true){std::cout 我是新线程,我的名字是 : new thread std::endl;sleep(1);}});while (true){std::cout 我是main线程... std::endl;sleep(1);}// pthread_t tid;// int n pthread_create(tid, nullptr, routine, (void *)thread-1);// if (n ! 0)// {// std::cout create thread error: strerror(n) std::endl;// return 1;// }// while (true)// {// std::cout 我是main线程... std::endl;// sleep(1);// }
} 课堂板书