计算机操作系统
文章平均质量分 76
小菜的OnePiece
这个作者很懒,什么都没留下…
展开
-
线程间同步
两个线程同时跑,最后的结果是4999,并不是我们想象中的10000。这是为什么呢?多个线程访问和修改了全局变量count,而这个变量没有被任何同步机制保护。在并发执行的情况下,多个线程可能会同时读取和修改count变量的值,从而导致竞态条件的发生。具体来说,当两个线程同时读取count变量的值并保存到本地变量中时,它们得到的可能是相同的值。接着两个线程分别将本地变量加1,并写回到count变量中。这样就会出现一个线程的修改被覆盖的情况,导致最终结果小于预期值。原创 2023-06-17 23:05:38 · 254 阅读 · 0 评论 -
进程间通信 + 消息队列
每个进程有各自不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1吧数据从用户空间考到内核缓冲区,进程2再从内核缓冲区吧数据读走,内核提供的这种机制成为进程间通信。原创 2023-06-16 23:00:22 · 865 阅读 · 0 评论 -
进程描述+PCB+fork用法介绍
他会给另一个进程去托管。我们再将程序改动一下,打印一下,各个进程的pid,来看看最后作为孤儿进程的child process 被哪个进程托管了。fork的作用是根据一个现有的进程辅助出一个新进程,原来的进程称为父进程,新进程称为子进程。系统中同时运行着很多的进程,这些进程都是从最初只有一个进程开始一个一个复制出来的。上面程序,当pid == 0 时,就是子进程执行逻辑,不等于0的时候就是父进程的代码执行逻辑。上面的结果可以看出 后面的孤儿进程 被 pid 为 1的系统的第一个进程给接管了。原创 2023-06-15 22:33:37 · 308 阅读 · 0 评论 -
malloc 是怎么回事
malloc 分配内存原创 2022-07-26 14:35:26 · 5391 阅读 · 1 评论 -
浅析函数栈
浅析函数栈,协程原理原创 2022-07-21 17:21:58 · 1143 阅读 · 1 评论 -
汇编语言之寄存器
计算机操作系统 之 寄存器原创 2022-07-12 16:27:24 · 372 阅读 · 0 评论 -
动态链接(地址无关技术)
动态链接so,节省内存大小,地址无关技术,所有的问题都可以用一个中间层来解决原创 2022-07-04 18:35:48 · 2099 阅读 · 0 评论 -
可执行文件的装载与进程
可执行文件只有被装载到内存以后才能被CPU执行。早期的程序装载十分简陋,装载的基本过程就是把程序从磁盘读取到内存的某个位置。随着硬件MMU的诞生,多进程,多用户,虚拟存储的操作系统出现以后,可执行文件的装载过程变得非常复杂...原创 2022-07-01 12:15:11 · 610 阅读 · 0 评论 -
程序的静态链接
目标文件静态链接成可执行文件原创 2022-06-30 16:32:36 · 797 阅读 · 0 评论 -
目标文件里有什么
程序链接前的目标文件里面有什么原创 2022-06-29 16:51:10 · 488 阅读 · 0 评论 -
程序的编译汇编和链接
程序是如何跑起来的?原创 2022-06-28 15:47:28 · 1241 阅读 · 0 评论 -
CPU 如何根据虚拟内存地址找到真实的内存地址
1. 确定页目录基址每一个CPU都有一个页目录基址寄存器,最高级页表的基地址就存在这个寄存器里。在X86上,这个寄存器是CR3.每一次计算物理地址时,MMU都会从CR3寄存器中取出页目录所在的物理地址。2. 定位页目录项(PDE)一个32位的虚拟地址可以拆成10位,10位和12位3段,上一步找到的页目录表基址加上高10位的值乘以4,就是页目录项的位置。这是因为,一个页目录项正好是4字节,所以1024个页目录项共占据4096个字节,即是4M,刚好组成1页,而1024个页目录项需要10位进行编码。这样,我原创 2022-04-13 15:26:29 · 1269 阅读 · 0 评论