做网站需要域名和什么网校网站模板
main
线程常见寄存器(CR3 EIP IR MMU TLB)
CR3是当前进程页表物理内存地址(包不能虚拟地址,不然套娃了)
CPU中有寄存器指向task_struct* current
 EIP:入口虚拟地址
 IR:当前命令地址
系统总线:CPU与内存之间线路
MMU:memoray manager unit
 硬件 ,虚拟到物理地址转化
为什么不让软件作,非要用硬件做虚拟/真实内存地址转换
 硬件比软件快
MMU与TLB都在CPU上
物理内存有寄存器
 地址:被操作物理地址
 操作:in/out
怎么做到进程资源分给线程
 代码如何被划分,需要操作系统可以做吗
 创建线程时,每个线程一个入口函数,每个进程天然得到一个函数地址
 TLB:translation lookside buffer (转译后备缓冲区)
 MMU先向TLB查表,没有命中(cache miss)就到MMU,之后反向更新TLB。命中就不用去MMU了
 TLB也是个硬件,在CPU上
页表存储信息结构(20+12)
 页表中不仅存放了真实内存地址,还有改page对应的其他信息
 页表信息图片:

每个页表只要20bite位就能映射4GB物理内存所有pages
 剩下12位为对应page信息
 linux内核页表代码图片
页表在进程加载时建立
 末端页表=20+12
缺页中断(重新理解new & 写时拷贝)
 MMU与TLB都在CPU内,其报错后CPU向目标进程发送信号,中断
new与malloc
 申请虚拟地址空间
 用该地址时会缺页中断,这是才真正去物理内存申请空间
写时拷贝
 原理同上
 4KB拷贝
缺页中断:进程与空间解耦
如何区分是缺页还是真的越界
线程的优缺点
线程优点:

 线程重要优点
- 线程切换:不切页表,不切上下文(cpu寄存器内容),不切TLB,cache等缓存机制
 - 线程间通信比进程简单的多
 
后四条优点是进程,线程共有的
线程缺点:

线程主要用途

 
 
 
局部性原理与应用
 每个cpu有cache:cpu与内存之间的缓冲区,先访问cache,miss的话再去物理内存访问数据
cache,TLB等缓冲区原理,本质是预加载。访问一地址,大概率会访问其周围地址数据
 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_cast<const 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);// }
} 
 
课堂板书

 
