操作系统
luke_cc
2年工作经验,撸过docker,k8s等云原生相关项目的源代码。
展开
-
内存模型简介
概述由于在现代计算的体系结构上,CPU的执行速度远远快于内存的访问速度,因此引入了诸如cache、分支预测、指令预取等技术以提高CPU的利用率。在多线程的编程环境下,这可能会带来一些问题,因此了解并掌握内存模型有助于我们在面对这些问题是有较为清晰的思路。内存模型的定义内存模型:描述多线程编程环境下,线程对内存的访问顺序内存模型的定义应包含以下三个方面:Atomic OperationsParital order of operationsVisable effects of operatio原创 2020-06-13 17:14:55 · 843 阅读 · 0 评论 -
fork与namespace
fork的使用fork用于创建子进程,而exec可以替换子进程执行的代码。一个简单的例子:#include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> #include <sys/wait.h> int main(){ pid_t pid; int r原创 2020-05-24 19:03:20 · 454 阅读 · 0 评论 -
如何判断一个结构体的实际占用空间
背景cpu读取内存是以2的整数次幂为单位读取(一次读取一块内存,如一次读入4个字节),如果不进行对齐,那么本来只需要一次进行的访问,可能需要好几次才能完成,并且还要进行额外的merger或者数据分离。方法先确定实际对齐单位,其由以下三个因素决定结构体最大成员(基本数据类型变量)预编译指令#pragma pack(n)手动设置 n–只能填1、2、4、8、16CPU...原创 2020-04-23 20:38:11 · 348 阅读 · 0 评论 -
用户线程与内核线程
空间类型用户空间用于执行用户代码, 如计算,循环等非I/O相关代码。内核空间用于执行系统级的代码,如调度线程、处理I/O等。可通过时间片耗尽中断(以及其他类型的中断)或用户空间的程序主动调用systemcall进行空间之间的切换。线程一般进程由若干个线程组成,而所有的线程组成了进程的流程。线程拥有自己的PC、寄存器以及栈,但是进程中的所有线程共享了同一个代码和数据片段,以及打开的文件。...原创 2020-04-09 23:38:49 · 476 阅读 · 0 评论