深入理解计算机操作系统——总体认识1

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

深入理解计算机操作系统

前言

在写这篇博客之前,我想把写博客的目的告知清楚,明确自己的目标。
      其实最初层次的目的很简单,在学习编程语言的时候经常在网上查阅资料。其中很多都是技术大牛以自己的心得体会所写下的博客,这些博客都是在我学习路上的宝贵财富。有很多精彩的博客把很多复杂难懂的问题,以平易近人的语言,图片,流程图等形式展现出来,让我深刻理解其中的含义。
      当时在我心中除了对这些博客的作者的崇拜、憧憬之外,还有一些迷惑。为什么他们会花这么多时间与经历来写这些博客?

      谁着时间的推移,我想我慢慢的理解了这个问题。这也是我之所以要写博客的原因。


      其一,通过写博客,特别是把抽象难懂的问题能以平易近人的、通俗化的语言描述出来。对自己本身也是一个挑战,也可以让自己对问题的认识更深,虽然会花掉自己很多的时间跟经历,但我认为是值的的。

      其二,通过把自己的观点阐述出来让其他人看到,能产生思想上的交流,有交流就有进步。比自己一个人苦苦思考更加有效。

      其三,天道酬勤,我知道自己并不是头脑聪明的一类人,想要达到自己的目标,必须要付出艰辛的努力。我想通过写博客的方式来磨练自己的毅力,一定要把写系列博客写完!

      其四,我也想向各个技术大牛看齐,紧追他们的步伐。同时也是想通过这种方式来寻求一下心里上的安慰。


      我所写的这一系列博客其实就是《深入理解计算机系统》这本书的读书笔记。这本书的英文名字是<computer system in programer perspective>。

      准确的说这本书名的中文翻译并不准确。这本书的主要类容是以程序员的思维来看待计算机系统,它并不包括计算机系统的方方面面,计算机系统是非常庞大与复杂的。想要了解它必须花费大量的时间。这本书相当于是对计算机系统的抽象,抽象成程序员所需了解、认知的计算机系统,而程序员不需了解的类容则被简化了。


那么问题又来了,为什么要学习计算机系统。--他是程序员的内功!


计算机系统漫游(总体认识)

      计算机系统是由硬件与系统软件组成,他们协同工作。它们的实现方式一直在变化,但其系统内在的概念是不变的。他们的关系就像土壤与树的关系,树木要是没有了土壤就不能存活;土壤没了树它就是一块没有活力的土壤。树有很多分叉,他们各不相同,但但它们又是从同一个枝干所生长出来的。
让我们来看看这段程序是如何在计算机系统上运作的吧
#include <stdio.h>
int main()
{
      printf("Hello World\n");
      return 0;
}
hello.c

想必大家对这段程序都很熟悉吧,但他是如何在计算机上跑起来的呢?

信息就是位+上下文

hello.c在计算机中是如何存储的呢?其实磁盘中的文件,存储器中的程序,网络中的数据都是以0和1的形式存储的。一个0或者1代表着一位,8位(bit)构成一个比特(byte)。不同的上下文让这些比特代表不同的数据,如在hello.c中,0和1组成的比特文件以ASCII码的形式转换为字符,以形成我们所能读懂的字符。

程序被其他程序翻译成不同格式

hello.c程序会被翻译成比较低级的机器语言指令,然后这些机器指令被打包成可执行文件。

这个翻译的过程大致的分为四个阶段,如下图所示:

预处理器(cpp):预处理器根据以‘#’开头的命令,修改.c程序。如#include<stdio.h>,作用就是直接把系统文件stdio.h插入到hello.c中,然后生成hello.i文件。

编译器(ccl):生成了汇编语言程序,hello.s。汇编语言的每条语句都以一种标准的文本格式确切的描述了一条低级机器语言指令。

汇编器(as):将hello.s翻译成机器语言指令hello.o,把这些指令打包成可重定位(relocatable)的目标程序的格式。

链接器(ld):注意我们的hello.c程序使用了printf()函数,printf()存在与单独的预编译目标文件printf.o中。链接器就负责把printf.o并入到hello.o中,结果得到一个可执行文件hello.exe。

了解编译系统是如何工作的是大有益处的

1.优化程序性能:

     第三章中将阐述编译器如何将c语言翻译成机器语言。

     第五章中将学习如何修改c代码,让编译器更好的工作。

第六章中将了解存储器的特性,编译如何把数组存入存储器。

2.理解链接时出错:

     第七章中将会得到很多答案。

3.避免安全漏洞:
     第三章将了解缓冲区溢出等特性。
                   
阅读更多
换一批

没有更多推荐了,返回首页