美文网首页
《程序员自我修养--第一章》待续。。。

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

作者: 杰米 | 来源:发表于2016-08-11 16:56 被阅读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

    相关文章

      网友评论

          本文标题:《程序员自我修养--第一章》待续。。。

          本文链接:https://www.haomeiwen.com/subject/zuqjdttx.html