一、第一章 温故知新

第一章首先简单说了计算机架构,北桥芯片的来源,南桥芯片的来源,以及系统对内存的基本管理(内存的分段管理,分页)等。然后后面讲到系统中的进程和线程,由于是多进程、多线程,以及安全问题。(线程安全问题其实就是同步问题)

多线程是为了cpu计算资源的更好利用,和资源的并行执行!

对于目前实现线程安全问题有一些概念:

原子操作,因为一些重要的同步计算过程不是原子的,那么在调度器,就有可能中断,让线程执行其他任务,然后回来再计算。那么这就造成这个时间段,有其他线程已经改变了你之前获取的数据。原子问题是同步问题的本质。

多说点:目前有部分同步操作,是基于硬件的,比如CAS操作;其实上层触发一个指令(机器指令),cpu 要处理很多计算,就是在硬件上执行这条指令对应所有步骤,硬件上设计上对应自己支持的所有机器指令。每一条指令就像自己已经记忆的众多指令的一个命令。(所有记忆的指令就是自己支持的指令)

二元信号量

互斥量:是不是正在有执行线程的标志

临界区:自己线程的概念,和正在执行标志位

读写锁

同步过度优化

多线程模式:

即用户态线程(对于开发者的执行引擎或者虚拟机,或者操作系统本身)和内核态的对应关系:一对一,多对一,多对多。

二、第二章 编译和链接

编译主要根据代码文件编译对应的.o或者.obj文件,一个代码文件对应编译一个.obj文件。编译过程首先的就是代码的字符静态检查,或者词法分析,然后就是语法分析。语法分析之后将你的代码建立一个代码书(根据你的代码逻辑),然后就是中间文件的生成。

中间文件是由中间指令和数据字符组成,中间文件中包含定位符,引用符号等。

链接就是将中间文件生成可执行文件,将定位符号,跳转符号,转换成具体的目标地址。链接过程虽是发生在编译器中,但是这个过程却是和操作系统的加载过程息息相关。

对于c/c++编译器 GCC 我们可以操作命令对其进行编译和连接,对于工具类,如svn、编译器、git;或者打包工具,如gradle, ant,msbuild,xcode,或者maven 都是有命令行指令的。在远程调用的时候,我们只能通过网络发出指令,实现自动化。

对于跑在操作系统上的应用,很多都是支持命令行的,因为对于我们的操作不仅仅是图形页面、人为UI操作。更在于我们通过指令,或者远程发送指令操作。

三、第三章 目标文件是什么

目标文件的生成不仅仅和编译器有关系,还和具体生成的目标文件在什么系统上执行有关。(如Windows,Linux,Solaris等)。目标文件中有代码,数据,符号,字符串等,它是以section为单位对代码,数据,符号和字符进行划段管理,.data是放置全局变量和静态变量,.code或者.text  section是放置代码。.bass是存放为初始化的变量(全局变量和静态变量)。对于中间目标文件还存在文件头,是用来存储文件属性,静态链接的信息,如静态链接的入口,链接位置等。如果是可执行文件,那么文件头是文件属性和操作系统的信息。

其实目标中间文件就是两大片段,一个是代码区,一个是数据区,数据和代码分开主要是代码在加载中,是只读的。数据区是可读写的。还有就是代码指令一般是一份,不用创建副本,但是数据可能要创建副本,因为涉及数据的备份等。

对于Linux系统目标文件一般是ELF,Windows系统目标文件一般是.o或者.obj文件。

对于目标中间文件,其中除了.data,.code,.bss,还有rodatal 存储常量数据。

.commemt存储编译器版本信息

.debug 存储调试信息,因为我们可能需要代码在调试下做debug信息处理,断点等等。

.dynamic 动态链接信息

.init/.final 初始化信息

.shstrtab 存储 section表信息  对于一个目标文件可能有很多的section,section 信息我们需要存储的。

.plt/.got 动态链接 入口,全局入口等信息。

四、第四章 静态链接

静态链接做的工作就是:将中间目标文件中的数据section,code section,进行整合,相同类似的section进行合并。代码段中的数据符号,换成引用地址,相同的代码片段进行合并整合。静态链接是以目标文件为单位的,最后生成各个可执行文件。对于编译器,点击run,将会将可执行文件打包成EXE文件(Windows,Linux可执行文件COFF)。

对于我们编译器工具,当然也可以将可执行文件打包成静态库文件(.lib),以供其他可执行文件调用。静态链接给各个段分配相对的目标地址,同时将引用换成目标地址,静态链接过程的耗时很长的,要比编译阶段的耗时要长。

可执行文件也是有和目标文件相同的section,可执行文件中的代码或者数据、字符;都是二进制代码(二进制文件),对于代码的二进制1与0的机器码就是对应每一条汇编指令,换句话说就是机器指令。在字符面上就是对应汇编的每一条用字符标记的人可读的指令,在数字层面就是机器指令。

五、第五章 Windows PE/COFF二进制文件

六、第六章 可执行文件的装载与进程

类似的书,比如《Compilers: Principles, Techniques, and Tools》这本也是传说中的龙书,还有非常著名的《SICP》和《PLAI》。

对《程序员的自我修养》(龙书)读后思考相关推荐

  1. 【读书笔记】程序员的自我修养总结(七)

    [读书笔记]程序员的自我修养总结(七) 标签: [编程开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:这是程序员的自我修养一书的读书总结,随着阅 ...

  2. 【读书笔记】程序员的自我修养总结(一)

    程序员的自我修养总结(一) 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:这是程序员的自我修养一书的读书总结,随着阅读的推进,逐步增加内容. 1. 关 ...

  3. 《C# 程序员的自我修养》送书活动结果公布

    截止到9月28日24:00 ,本次送书活动<C# 程序员的自我修养> 共收到150多位同学参与回复. 以下5位同学将获赠书籍一本: 夏树.Damon.水墨清华.天天.kang   以上同学 ...

  4. 程序员的自我修养,好文

    很认真的聊一聊程序员的自我修养 本文正在筹备第二版,以下是第一版主要内容 首先要谈的是,今天的话题所聊的程序员包含哪些人? 在中国,写程序,不仅仅是一种兴趣,更多的时候,还是一种普通职业和谋生工具 大 ...

  5. 很认真地聊一聊程序员的自我修养

    最近看了<浅谈程序员的英语学习>,对于文章中的观点我非常认同,英语是非常重要的,但文章站的高度还是太高,具体表述的学习方法我不是很认同,也认为不太实际,恰好之前有一篇一直没有发表的文章想重 ...

  6. 一个“程序员的自我修养”是什么?

    在<喜剧之王>中,周星驰扮演的尹天仇,一直梦想成为一名演员,而他不管是在扮演跑龙套,或者在街坊中开设演员训练班,亦或成为主角时,他对待演员的态度,始终是认真,热爱而又投入的.而那一本他随身 ...

  7. 程序员的自我修养(2)——计算机网络(转) good

    相关文章:程序员的自我修养--操作系统篇 几乎所有的计算机程序,都会牵涉到网络通信.因此,了解计算机基础网络知识,对每一个程序员来说都是异常重要的. 本文在介绍一些基础网络知识的同时,给出了一些高质量 ...

  8. 程序员的自我修养(2)——计算机网络

    本文转载至 http://kb.cnblogs.com/page/211867/ 来源: Cricode  发布时间: 2014-07-04 12:39  阅读: 979 次  推荐: 2   原文链 ...

  9. 程序员的自我修养——读《软技能-代码之外的生存指南》笔记

    我记得曾经读过俞甲子的<程序员的自我修养--链接.加载和库>,当时就觉得这个书名起的不太合适,有点不合主题,因为这本书主要讲述链接库的事情,我认为这个是编译器的一部分,是作为程序员要掌握的 ...

  10. 程序员的自我修养(转载)

    疲于加班,幸好我还保留看看别人写的东西的习惯,下面转载的一篇文章,在某些地方触动到了我,有些时候我也是反面典型,思考得少,反而直接拿来用的更多,但是我发现,往往很多问题都是糊里糊涂地用了别人的东西导致 ...

最新文章

  1. /etc/inittab
  2. uni-app 页面数据无法渲染原因总结
  3. Mac中安装node.js和npm
  4. 如何成为阿里巴巴大数据开发工程师?你要学习很多东西
  5. 万维网服务器协议提供web,万维网的HTTP和FTP协议.doc
  6. 如何将MATLAB程序发布为独立的不依赖MATLAB环境可执行的程序包(基于Matlab R2015b版 )
  7. IBM、甲骨文、CNCF 就谷歌对 Istio 治理的处理提出抗议
  8. springboot下maven分环境打包
  9. 在地图上点击一下,在图层上画一个点,并显示相关的信息
  10. 诛仙3饮马江南服务器信息,横刀云渺,饮马天河----浅谈云渺天河5S单刷
  11. 计算机初始《wps表格》教案,wps教案
  12. adb shell screencap/screenrecord(三级命令)
  13. 我的世界基java版刷怪机制_我的世界1.8版本刷怪机制_我的世界代码1.8版本刷怪机制_快吧单机游戏...
  14. 小米note开发者选项如何开启
  15. Java+spring+springmvc 基于ssm的家乡特产销售系统#毕业设计
  16. 获取cron表达式 下次执行时间 和 执行间隔
  17. HTML小游戏五子棋(附源码)
  18. mac idea 常用快捷键总结
  19. linux 修复ntfs磁盘,安装和使用NTFSfix(安装Ntfs-3g),以在Linux上修复Windows硬盘驱动器...
  20. 百度钱包杀入移动支付背后的“阴谋论”

热门文章

  1. RuntimeError: Model class django.contrib.sites.models.Site doesn't declare an explicit app_label and
  2. 修改文件后git只用两步push文件
  3. Flume碰到begin()is called when the transaction is open
  4. Ubuntu16.04下面壁纸切换软件variety设置
  5. ansi编码_了解字符编码,不再恐惧文件乱码
  6. Andriod中的两种自定义颜色选择器
  7. 自定义队列(优化了数组固定长度的弊端)以及集合中的一些重点内容
  8. 程序员都是吃青春饭的?32岁程序员面试直接被面试官送走,心衰!
  9. (1)kendo UI使用基础介绍与问题整理——简单说明
  10. Java中方法参数的传递