0%

什么是系统调用 上层应用是怎么使用操作系统的呢?操作系统提供系统调用来供上层应用来和操作系统交互,就相当于OS为上层应用暴露了一堆接口,应用使用这些接口来完成相应的功能。举个例子,当你使用printf("hello, world!");时,printf是怎么把 hello, world! 输出到控制台上的呢?这里就是printf通过系统调用接口write,将其输出到了控制台上。那为什么不是printf直接将内容输出,还要通过系统调用write来做呢?展示控制台的这个屏幕,称其为显存,说白了就是一块硬件,那么你在屏幕上显示hello, world!,其实就是在往显存这个硬件中写入数据,而往硬件中写入数据是进程控制CPU去做的,也就是内核部分做的事情,所以write这个动作就属于系统调用了,需要
阅读全文 »

虚拟内存是什么? 虚拟内存是计算机系统内存管理的一种技术。它是的应用程序认为它拥有连续可用的内存,而实际在物理内存层面,可能是不连续的内存碎片,虚拟内存使用映射的方式将物理内存碎片映射起来,使其看起来是连续的内存。 虚拟地址和物理地址之间怎么映射的? 内存分段 内存分段是较早提出的一种分段方式,分段方法也简单,就是段到段的映射。当需要一块大小为n的虚拟内存时,此时就直接在物理内存中寻找一块连续的物理内存使用就好了。 内存分段解决了程序本身不需要关系局的物理内存地址的问题,但也存在以下问题: * 内存碎片严重。 * 内存交换的效率低。 当你不断的申请释放申请释放内存时,就会产生很多不连续的小物理碎片,造成空间浪费。如何解决这个问题呢?就需要把不连续的内存空间重新连续起来,那么就要把
阅读全文 »

CPU通过不断的执行一条条指令来运行程序,那执行任务又该怎么理解呢,任务是什么?你知道CPU伪共享是什么意思吗?

阅读全文 »

CPU Cache的数据结构与读取过程 CPU Cache的数据是从内存中读取过来的,它是以一小块一小块读取数据的,而不是按照单个元素来读取数据的,在CPU Cache中,这样一小块一小块的数据,被称为Cache Line (缓存块)。Cache Line对应到内存的那一小块数据称为Block(内存块)。 可以使用以下命令查看Cache Line的大小: linux1 2 $ cat /sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size 64 64即64字节,即L1 CPU Cache一次载入的数据大小为64字节。 比如,有一个int array[100]的数组,当载入array[0]时,也会同时将array[1
阅读全文 »

你知道吗,位于CPU中的各类寄存器、CPU cache、内存 SSD硬盘、机械硬盘都是冯诺依曼模型中的存储单元,为什么设计了这么多存储器呢,他们之间的关系又是什么,存储器是怎么存储数据的,又是怎么提供给CPU使用的呢?

阅读全文 »