《程序员自我修养--第一章》待续。。。

CPU

  • 分时系统
  • 多任务系统

内存 推荐阅读

地址空间

32位的cpu物理地址空间为2^32字节(这里不理解)
0x00000000~0xFFFFFFFF

直接使用物理地址空间的弊端:

  • 程序易被直接访问物理地址而遭修改内存数据
  • 重定位问题

虚拟地址空间(物理地址的映射)

虚拟地址空间是指虚拟的,人们想象出来的地址空间,其实并不存在,每个进程都有独立的地址空间,每个进程都有独立的虚拟空间,每个进程只能访问自己的地址空间,这样做到了进程的隔离

  • 分段(Segmentation)
  • 分页(Page)

分页的基本方法是把地址空间人为等分成固定大小的页。
32位的虚拟地址空间按4KB分页,有1048576个页。

虚拟储存实现靠硬件支持,不同CPU不同,几乎都采用MMU(Memory Management Unit)来进行页影射。
CPU发出虚拟地址,经过MMU变成物理地址。

线程

一个标准的线程由线程ID,当前指令指针(PC)、寄存器集合和栈堆组成,各线程共享程序内存空间(包括代码段,数据段,堆)等资源

Linux多线程
  • Linux内核不存在真正意义上的线程概念,所有执行实体称任务(Task),每个任务类似单线程的进程,具有内存空间,执行实体,资源文件等。
  • 实际意义上,多个任务构成一个进程。任务成线程。

fork

fork函数复制当前线程

pid_t pid;
if (pid = fork())

fork调用欧,新任务和本任务一起从fork函数返回,但不同的事本任务的fork将返回新任务的pid,而新任务返回0.
fork不复制原任务的内存空间,而是共享一个写时复制的内存空间,除非任意一个任务对内存修改,内存会复制一份提供给修改方单独使用

fork和exec通常用于产生新任务,如果要产生新线程,可以使用clone

你可能感兴趣的:(《程序员自我修养--第一章》待续。。。)