版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cc_net/article/details/10418711

序言

又有两年没有写Blog了, 这2年从做windows phone 到 Android C++, 慢慢的很多观念也有所改变了。以前一心想做C#相关的工作,现在却感觉,什么语言都无所谓了。公司项目挺忙,加班比较多,不忙的时候又想休息休息。 所以blog又荒废了好久。也很少有时间早学习, 加上年纪越来越大,学习动力和热情也越来越小了。最近一个月不是特别忙,抽空看了看《深入理解计算机系统》、《程序员的自我修养》、《现代操作系统》三本书,然后顺带看了看编译,汇编相关的知识, 也在网上查了不少资料。突然发现好多东西其实是大学里都学过,这也算是工作6年对以前知识的一个总体的复习吧。在不同时期看相同的书,总会有不同的收获。

对于一个应用层的开发者来说,不了解CPU是如何工作的,内存是如何布局的,多进程是怎么实现的并不会影响他写出好的应用程序。就好像一个武术演员,不懂九阳神功一样可以拍出很好的动作电影。但是看了那么多武侠剧,那些路人甲,宋兵乙为什么总是被大侠们狂虐?原因很简单,他们木有内功。套路只是一方面,拼的还是内功啊。大侠们内功那里来的?不是武二代就是出师名门,说白了还是看背景而不是背影。这种东西不是随便教的,当然也不是谁都能学会的。恩,有点扯远了。对于我们来说,这些知识就是我们要学习的计算机内功的一部分。虽然这些知识并不能交我们怎么写一个Android APP,也不能帮我们学习Web开发,就好像虚竹有了内功不会招式也是没用的,所以要内外兼修。对于我们这些已经掌握了招式的宋兵乙来说,在没有干爹的情况下,就只能靠自己来修炼内功了。不奢求称为大侠,只求3招内不被打倒。

对于计算机专业毕业的人来说,后面大部分都是学校都学过,从纯硬件的模拟电路,数字电路,到软硬件相关的计算机组成原理,计算机体系结构,再就是最底层的操作系统,编译原理,汇编,C语言,到上层存软件的开发语言。但是很多人都觉得是枯燥的理论知识,实际这真是挺有用的东西。但是工作后基本不会接触,所以都忘记的差不多了,看下书一段时间又忘记了,所以这次决定写下来,算是学习笔记,也算是为一些朋友提供一个参考。

但是对于这些知识,我也纯粹是一个现学现卖的理论派,我可以给你介绍一些基本的汇编命令。你就不要为难我要我用汇编写个完整程序;我可以说说Linux设备驱动结构,你克别要我给你的自行车也写个驱动。 所谓术业有专攻,我们不是为了能去做硬件,写汇编,写驱动,所以也不要奇怪为什么我有时还会看看Linux驱动开发的书,我可能也就是随便翻翻,找想了解的重点看,可能1天就看完了。我们学习这个只是为了了解相关的知识和原理,帮助我们更好的做开发。有一层的九阳神功足以保命了,练得太多小心走火入魔。

问题

作为一个IT工程师,用现在流行的话来说,这也是个高端大气上档次的工作。但是你是否真的了解你每天都在用的计算机,你又是否真的了解你自己写的程序呢?当一个人问你计算机是怎么工作的时候,你会不会一脸茫然的想,我怎么从来没想过这个问题?

  1. 我们的代码是如何被编译成可执行文件的?
  2. 程序是如何被CPU执行的?
  3. 进程和线程到底是什么东西?
  4. CPU的指令和汇编语言和程序库和开发语言有什么关系?
  5. 为什么系统可以同时运行多个程序,是如何做到的?
  6. .NET的编译出来的是托管代码,和C++的Native代码执行有区别吗?
  7. 为什么我new了1G的内存空间,实际内存却没变化?

如果你能很确定的回答这些问题,那么我有不懂的问题就应该可以向你请教了。那也麻烦你帮我找找文章中的错误。如果你不太清楚甚至是完全说不清,那我们就一起来学习学习。

大纲

这个系列是介绍计算机的原理,主要涉及的是软件方面的,硬件原理只会简单的从体系结构方面进行介绍。每一个点都不会特别深入,一方面是没这个能力,另一方面是没必要,因为每一个点可能都是厚厚的一本书。而且对于我这种基本和应用程序打交道的码农来说,这个程度的了解也是比较合适的。整个学习过程也就是看书,查资料,再重新看书,再查资料,最后总结。里面也会结合自己有点一点点经验,把比较零散的点结合起来方便理解。 文章里肯定会存在很多错误,希望可以指出来。

另外我把有读到相关的书列出来:

  • 《深入理解计算机系统》-- 这是外国大学的教材,可以多花点时间看,总体理解计算机体系结构和原理
  • 《现代操作系统》 -- 挺不错,帮助理解操作系统运作方式
  • 《Linux内核设计与实现》--《linux kernel development》简称lkd ,先大概看一遍,很多地方不懂,学习了其他在重新看
  • 《程序员的自我修养》 -- 相当好的一本书,主要介绍程序编译和加载,了解程序到底怎么开始运行
  • 《Windows核心编程》 -- 《Windows Programming》 以前看过2遍了,看过了lkd,准备再看一边进行对比
  • 《80x86汇编语言程序设计教程》 -- 回一下寻址方式,寄存器的作用
  • 《Linux设备驱动开发详解》 -- 大概浏览了几章,还不错,虽然没做个 ,但是比较容易懂
  • 《Android内核剖析》 -- 最近刚开始看,和这里写的东西可能没太大关系,而且偏Framework层
  • 网上搜索的文章,论坛,博客等等....

还有一些没读的

  • 《计算机程序的构造与解释》-- 看了下目录,有空再随便翻翻
  • 《深入理解Linux内核》 --《understading the linux kernel》简称utlk ,很经典的一本书,相对于lkd更加深入
  • 《Linux设备驱动程序》--《linux device drivers》简称ldd ,驱动开发,可以大概了解下
  • 《深入分析linux内核源码》 -- 需要结合源码比较好吧,不一定会去看了
  • 《深入解析Windows操作系统》 -- 《Microsoft Windows Internals》和Linux的对照着看看
  • 《ARM体系结构与编程》-- X86弄完后了解下ARM架构,估计不太看得懂

主要是Linux相关的书比较多,但是后续文章中一些内容都是比较通用的,有些地方会写出Windows和Linux的差异。其中ldd,lkd,utk三本经常看到论坛大神回答问题是说你看那看utk那里那里就知道了,我后来搜索发现我也看了2本了,虽然只是了解性的看了看。

计算机原理学习(1)-- 计算机基本工作原理

计算机原理学习(2)-- 存储器和I/O设备和总线

计算机原理学习(3)-- 内存工作原理

计算机原理学习(4)-- 操作系统发展和程序编译

计算机原理学习(5)-- x86-16 CPU和内存管理

计算机原理学习(6)-- x86-32 CPU和内存管理之分页管理

计算机原理学习(7)-- x86-32 CPU和内存管理之分段管理

计算机原理学习(8)-- 进程的内存映射和内存共享

计算机原理学习(9)-- 可执行文件的编译和结构

计算机原理学习(10)-- 可执行文件的加载和运行

计算机原理学习(11)-- 进程的内存布局

(TBD) 2014.4.26 Update



好东西——计算机原理学习(序)相关推荐

  1. 计算机原理学习(序)

    转载地址:http://blog.csdn.net/cc_net/article/details/10418711 序言 又有两年没有写Blog了, 这2年从做windows phone 到 Andr ...

  2. 计算机原理学习(1)

    序言 又有两年没有写Blog了, 这2年从做windows phone 到 Android C++, 慢慢的很多观念也有所改变了.以前一心想做C#相关的工作,现在却感觉,什么语言都无所谓了.公司项目挺 ...

  3. 计算机原理学习指导第3版,计算机组成原理学习指导与习题解析(第3版)(21世纪大学本科计算机...

    摘要: 这本<计算机组成原理学习指导与习题解析(第3版)>由蒋本珊编著,是与"十二五"普通高等教育本科国家级规划教材<计算机组成原理(第3版)>完全配套的学 ...

  4. 计算机原理学习(2)-- 存储器和I/O设备和总线

    版权声明:本文为博主原创文章,未经博主允许不得转载.    https://blog.csdn.net/cc_net/article/details/10439665 前言 前一篇文章介绍了冯诺依曼体 ...

  5. 计算机原理学习(1)-- 冯诺依曼体系和CPU工作原理

    前言 对于我们80后来说,最早接触计算机应该是在95年左右,那个时候最流行的一个词语是多媒体. 依旧记得当时在同学家看同学输入几个DOS命令就成功的打开了一个游戏,当时实在是佩服的五体投地.因为对我来 ...

  6. 计算机原理学习(一)

    计算机基本原理 现代计算机,大部分都是基于冯诺依曼体系结构,而我们这里谈论的也是此问前提.冯诺依曼的核心是:存储程序,顺序执行.所以不管计算机如何发展,基本原理是相同的.计算机程序实际上是告诉计算机做 ...

  7. 【计算机原理学习】二进制和十进制转换

    目录 一.二进制转换为十进制 二.十进制转换为二进制 整数部分计算 小数部分计算 总结 一.二进制转换为十进制 二.十进制转换为二进制 由于整数部分和小数部分转换方式不同,需要将整数部分和小数部分分别 ...

  8. 计算机原理学习笔记——第一章 计算机的抽象和技术——2 程序的表象之下

    程序的表象之下

  9. 计算机编译原理有必要学吗,计算机程序编译原理学习心得

    计算机程序编译原理学习心得 <编译原理>是计算机专业的一门重要课程,正如教材:第一章的引论所述,"编译程序是现代计算机系统的基本组成部分之一"."一个编译程序 ...

最新文章

  1. 返聘前任员工:效率高出新人40%!
  2. CodeForces - 467C George and Job(二维dp)
  3. 10截图时屏幕变大_手机上网课、开视频会议,如何让屏幕变大一点?
  4. 极客无极限 一行HTML5代码引发的创意大爆炸
  5. LeetCode 439. 三元表达式解析器
  6. android 读后台数据,Android 模拟后台数据返回 ,便与测试
  7. 顺丰薪酬体系大曝光,看完感叹:太走心了,不服不行!
  8. linux下查看内存频率,内核函数,cpu频率
  9. S11 day 94 RestFramework 之 APIView视图
  10. Excel根据身份证号提取省份
  11. PPC软件字体太小的调整
  12. jupyter代码无法运行
  13. android 手机查看分辨率,adb命令查看报名和查看手机分辨率
  14. html在页面显示一个正方形,CSS实现一个自适应的正方形的方法示例
  15. 记忆宫殿--清华一日游
  16. 树莓派 PHP白屏,树莓派系统安装及3.5寸显示屏白屏解决办法
  17. 4246. 【五校联考6day2】san (Standard IO)
  18. 卷积神经网络实现人脸表情识别
  19. Arduino设置esp8266实现局域网通信
  20. 线性代数-向量,矩阵,线性变换

热门文章

  1. VS2013如何生成exe文件以及如何更改exe程序图标
  2. Django框架之DRF框架
  3. 没有换行又很多很多行的代码,如何快捷换行?
  4. ovation系统服务器安装,OVATION系统
  5. 实体商家如何通过小魔推同城拓客,在短视频平台提升曝光量
  6. 小学生数学测试软件编写分析,小学数学测试的质量分析
  7. zephir-基本语法
  8. marquee详细属性
  9. 一分钟看懂外卖O2O:小心!别掉入这三个坑里
  10. 压抑的西安互联网环境,你有纠结辞职吗?