【精要图】计算机硬件CPU、操作系统OS、程序ELF、网络TCP/IP

160 阅读3分钟

A、计算机硬件CPU

上图是已经进化成熟的个人pc主机,我们反观回到单片机原始运行步骤逻辑为下图,

cpu阅读计算指令,与我们阅读书籍一样。都是一页一页、一行一行进行阅读(执行)。当然,cpu跟我们大脑阅读类似,在遇到某个陌生关键词时会去查找认识这个关键词,认识好了再重新回来进行阅读(这就是cpu的中断机制)。

CPU架构图

cpu在后摩尔效应失效后,演化为XPU(cpu、gpu、tpu、apu共生,分工协作专项运算时代)

CPU和GPU架构差异在计算重点有差异

ARM类芯片存储架构

现在的CPU一般都是多核结构,一个CPU芯片内部会集成多个Core,每个Core都会有自己独立的L1 Cache,包括D-Cache和I-Cache。在X86架构的CPU中,一般每个Core也会有自己独立的L2 Cache,L3 Cache被所有的Core共享。而在ARM架构的CPU中,L2 Cache则被每簇(Cluster)的Core共享。ARM架构SoC芯片的存储结构

B、操作系统OS

可以粗略对OS分为驱动程序、内核、接口库、外围。其中内核,主要有进程管理、内存管理、文件管理、设备驱动管理这几个核心管理单元。

我们平时使用的电脑对应的os,本质上和嵌入式对应的os,在操作系统底层管理思想上是一致的。本源要追溯到“冯诺依曼体系”思想,再往前则要继续追溯到“图灵机”构想。

从程序到进程步骤

程序是躺在磁盘里面的非运行文件,进程是程序挪到内存上供os running的(内存上的)运行数据组。

C、从程序到进程ELF

在Linux系统中,每个进程都使用一个task_struct结构体表示,各个task_struct构成一个链表,由操作系统的调度器管理和维护,每一个进程都会接受操作系统的任务调度,轮流占用CPU去运行。只要轮换的速度足够快,就会让你有种错觉:你可以一边听歌,一边聊天打字,一边下载文件,感觉所有的程序在同时运行。

函数在(堆栈)内存中分布方式

一个程序中往往存在多级函数调用,每一级调用都会运行不同的函数,每个函数都有自己的栈帧(Frame Point)空间,每一个栈帧都有栈底和栈顶,无论函数调用运行到哪一级,SP总是指向当前正在运行函数栈帧的栈顶,而FP总是指向当前运行函数的栈底。

C标准库实现了一层内存管理机制,OS内核提供原始的内存分配管理机制。

内存分配器通过系统调用brk()/mmap()向Linux内存管理子系统“批发”内存,同时实现了malloc()/free()等API函数给用户使用,满足用户动态内存的申请与释放请求。

D、《网络是怎么连接的》

大学时候,讲述计算机网络的教材还有老师都是比较boring的。但是其实有很多非常有趣的书籍和作者可以把这个boring的技术讲解的非常引人入胜。《网络是怎么连接的》就是这么一本好书。