《程序员自我修养--第一章》待续。。。
2016-08-11 本文已影响12人
杰米
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