![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
啦啦拉德玛西亚
这个作者很懒,什么都没留下…
展开
-
信号
1.信号是怎么产生的?可以由内核,进程产生2.信号怎么发送到进程?2.1.发送进程->内核所有信号都需要通过内核发送,内核在收到信号后会对其参数进行检测(这个进程能不能发送这个信号…)。校验通过后,将信号数据(信号值,产生原因,发送者进程ID)拷贝到内核空间.然后再发送给对应的进程。2.2.内核到->接受进程早期UNIX版本,进程保存了一份未处理信号的位图。当内核发送信号到进程时,先检测进程是否对该信号未处理,时则丢弃当前信号。这样的信号称为不可靠信号。不可靠信号每次执行完都会恢复默原创 2021-05-06 15:56:03 · 148 阅读 · 0 评论 -
进程虚拟地址空间
1.PCB内存管理结构:PCB对内存的管理结构,页表指针 + List<段信息>。一次内存的分配其实就是分配逻辑地址更改段信息,逻辑地址的合法性也是通过这个结构检测的。2.页表结构 radix tree:物理地址需要和虚拟地址建立映射管理,假设映射关系为 物理地址 = f(虚拟地址)。那么页表就是函数f()。 页表使用radix tree结构。3.页表项结构:4.内存查找过程:计算机指令使用的是虚拟地址,虚拟地址是连续的更容易管理使用。物理内存存储在页表中计算机中的一块硬件原创 2021-05-06 15:53:15 · 179 阅读 · 0 评论 -
进程
1.进程模型—状态机状态 = 内存 + 寄存器动作 = 指令/中断状态1—动作1–>状态22.进程管理fork :状态机的拷贝execve:可执行文件(ELF)装入内存,更新状态机的代码段数据段更改IP寄存器指向ELF的main函数exit:状态机的销毁3.进程调度硬件产生时钟中断操作系统收到中断,保存当前运行环境到内存(线程/进程的堆栈)。调度算法选择一个进程/线程恢复运行环境(运行环境就是寄存器的值)。3.1调度策略轮询优先级调度Linux complete fai原创 2021-05-06 15:52:02 · 161 阅读 · 0 评论 -
函数调用栈
void swap(int * a, int *b){ int c; c = *a; *a = *b; *b = c;}int main(){ int a, b; a = 16; b = 32; swap(&a, &b); return (a - b);}.text _swap: pushl %ebp # 保存原ebp值,设置当前函数的帧指针。 movl %esp,%ebp subl $4,%esp # 为局部变量c在栈内分配原创 2021-05-06 15:51:27 · 188 阅读 · 0 评论 -
并发锁
1.互斥锁sleep waiting 获取锁失败 由内核调度进入休眠态。等待内核的通知,重新唤醒执行。由于进入了睡眠态,导致操作系统进行了线程的切换(有一定的开销 要保存线程的运行环境等)特定:获取锁失败 会陷入睡眠 适用于互斥代码执行时间较长1.1pthread_mutex_lockpthread_mutex_lock(&mxlock);++val;pthread_mutex_unlock(&mxlock);1.2pthread_mutex_trylock好处就是不用阻塞原创 2021-05-06 15:50:33 · 183 阅读 · 0 评论 -
并发
1.基础知识1.1编译器和硬件对程序的优化1.1.1指令重排序int i = 0; //语句1 bool flag = false; //语句2 i = 1; //语句3 flag = true; //语句4优化后可能变成 13241.1.2指令合并int i = 0; //语句1 i = 1; //语句2 i = true;原创 2021-05-06 15:49:58 · 99 阅读 · 0 评论 -
中断 系统调用
操作系统启动bios:负责硬件初始化以及检测,加载磁盘中0柱0面1的bootloader到内存,转交CPU执行bootloader代码。bootloader:加载操作OS到内存,执行OS代码。中断 系统调用中断异常系统调用源头外部硬件内核被动产生主动触发处理时机异步同步同步/异步响应打断执行 对用户透明(感知不到)杀死/重新执行等待完成继续执行OOT-1620287319707)]...原创 2021-05-06 15:49:09 · 83 阅读 · 0 评论 -
信号产生到触发过程
1.信号是怎么产生的?可以由内核,进程产生2.信号怎么发送到进程?2.1.发送进程->内核所有信号都需要通过内核发送,内核在收到信号后会对其参数进行检测(这个进程能不能发送这个信号…)。校验通过后,将信号数据(信号值,产生原因,发送者进程ID)拷贝到内核空间.然后再发送给对应的进程。2.2.内核到->接受进程早期UNIX版本,进程保存了一份未处理信号的位图。当内核发送信号到进程时,先检测进程是否对该信号未处理,时则丢弃当前信号。这样的信号称为不可靠信号。不可靠信号每次执行完都会恢复默原创 2021-03-25 16:02:19 · 429 阅读 · 0 评论