程序是怎样跑起来的

矢泽久雄
日文版重印41次,“计算机组成原理”图解趣味版,蹲马桶就能看懂的编程基础知识!本书适合:菜鸟程序员入门进阶;中级程序员查漏补缺;高手程序员向家人(女友、老妈等)普及计算机知识。如何向小学生讲解CPU和二进制?如何向中学生讲解内存和磁盘?如何向女高中生讲解操作系统的原理?如何向老奶奶说明显示器和电视的不同?如果你完全没有思路,就应该读一读这本书。以图配文,深入讲解编程基础知识;语言通俗,即使是文科生也能看得懂。
木木单眼看世界

程序是怎么跑起来的 总结 一、CPU Cpu是寄存器的集合体,包括累加、标志、程序计数器(决定程序流程)、基址、变址、通用、指令和栈寄存器。 二、数据 数据用二进制表示是因为IC(集成电路)只有2个状态。计算机处理数据基本单位是一个字节,即8位,处理的数据都是8的倍数;反码补码都是为了方便计算机处理的数据形式;算数右移和逻辑右移是不同的右移方法,逻辑计算是计算机的基础; 三、小数运算 和十进制10除于3除不尽一样,二进制按照人类现有的设计表示方法也有无法表示的小数。为了得到正确的运算结果,可以采用*倍数后化作整数去运算的方法。 四、内存 内存的逻辑模型就是楼房,占有的楼层数就是占用的内存的大小,例如声明变量是整型就是4个字节。利用内存有几种形式,数组、栈、队列、链表、二叉树。 五、磁盘 程序需要读入内存才能运行,磁盘是存储的一种便宜介质,还可以当作虚拟内存,在一定程度上协助程序运行。 六、压缩数据 压缩算法就是数据的另一种表示方式,通过各种压缩算法简单存储后,可以再次运算还原的方法。其中哈夫曼算法是通过统计频率来设计的算法,能比较大的压缩。因为图片损失一点质量没有太大的影响,所以除了有bmp无损格式,还有jpeg,tiff,gif等格式或多或少采用一定技法去压缩过的图片格式。 七、运行环境 程序的运行环境=操作系统+硬件。windows克服了除了cpu以外的硬件差异,是把大部分程序都要做的和硬件交互的事情都处理好了,提供了api接口给所有其他的应用程序调用。因为不同操作系统提供的api不同,jvm会自己带一套虚拟系统来兼容不同操作系统。操作系统通过bios中的引导程序开启,bios包含键盘、磁盘、显卡等基本控制程序。 八、可执行文件 计算机只能运行本地代码,本地代码是数值的罗列。可以通过编译器吧高级语言的源代码转化成本地代码,编译以后还要进行链接生出可执行文件,如.exe文件才能运行。将一些大家都会调用的函数等写成通用的即dll文件,可以方便大家统一调用。 九、外围设备 外围设备如键盘、鼠标、打印机等采用中断请求的方式来实现实时处理。图片显示是往主存的一部分空间写入数据来显示,现在是有独立显卡来处理。 总结:从沙子到纯硅到晶圆到光蚀到芯片到cpu,把一堆ic堆在一起形成可以计算的硬件;再想出方法把现实世界的数据和这些硬件联系起来表示出来,找到最简单的方法就是二进制数,然后需要通过各种编码和规范把字母、文字、小数都能表示出来。这时候除了快速运算的cpu还需要东西存储,就分为了速度快的内存和速度慢的磁盘。因为很多时候数据的表示有很多事重复的东西,在传输或者保存等情况下需要体积小,所以可以通过算法算出另一种表示方法去记录。这种算法分成可逆和不可逆的算法,不可逆如jpeg等图片格式。有了这一切以后,大家都可以写程序去计算数据了。但因为有很多非常底层的东西既非常深奥又经常被大家重复使用,于是就把这部分抽象化做出了操作系统。有了系统以后还有很多.dll文件事后面丰富的一些通用的处理函数。但因为操作系统也可以写出很多,也有些高级编程语言为了兼容不同操作系统,自己再抽象一层,对每个操作系统又封装了自己的一套方式,例如jvm,只要各系统都装上它,程序就可以开发一次,到处使用。这些都完善之后,计算机的运算基本完善,但是还缺少控制输入和输出的方式,于是对于外围设备采用了中断请求的方式去做交互,只要你来找我,我才去理你,而不是时刻都在关心你在干什么。然后外围设备有很多,类型也有很多,于是给每个厂家都给了一套统一的操作系统要求的规范。不过你自己怎么设计和运行你的硬件,反正同样的硬件和功能要按照我的规范可以使用,或者你给我一个翻译包,我就知道使用你,这就是驱动程序。完。

锁螺丝

程序是怎么跑起来的 总结 一、CPU Cpu是寄存器的集合体,包括累加、标志、程序计数器(决定程序流程)、基址、变址、通用、指令和栈寄存器。 二、数据 数据用二进制表示是因为IC(集成电路)只有2个状态。计算机处理数据基本单位是一个字节,即8位,处理的数据都是8的倍数;反码补码都是为了方便计算机处理的数据形式;算数右移和逻辑右移是不同的右移方法,逻辑计算是计算机的基础; 三、小数运算 和十进制10除于3除不尽一样,二进制按照人类现有的设计表示方法也有无法表示的小数。为了得到正确的运算结果,可以采用*倍数后化作整数去运算的方法。 四、内存 内存的逻辑模型就是楼房,占有的楼层数就是占用的内存的大小,例如声明变量是整型就是4个字节。利用内存有几种形式,数组、栈、队列、链表、二叉树。 五、磁盘 程序需要读入内存才能运行,磁盘是存储的一种便宜介质,还可以当作虚拟内存,在一定程度上协助程序运行。 六、压缩数据 压缩算法就是数据的另一种表示方式,通过各种压缩算法简单存储后,可以再次运算还原的方法。其中哈夫曼算法是通过统计频率来设计的算法,能比较大的压缩。因为图片损失一点质量没有太大的影响,所以除了有bmp无损格式,还有jpeg,tiff,gif等格式或多或少采用一定技法去压缩过的图片格式。 七、运行环境 程序的运行环境=操作系统+硬件。windows克服了除了cpu以外的硬件差异,是把大部分程序都要做的和硬件交互的事情都处理好了,提供了api接口给所有其他的应用程序调用。因为不同操作系统提供的api不同,jvm会自己带一套虚拟系统来兼容不同操作系统。操作系统通过bios中的引导程序开启,bios包含键盘、磁盘、显卡等基本控制程序。 八、可执行文件 计算机只能运行本地代码,本地代码是数值的罗列。可以通过编译器吧高级语言的源代码转化成本地代码,编译以后还要进行链接生出可执行文件,如.exe文件才能运行。将一些大家都会调用的函数等写成通用的即dll文件,可以方便大家统一调用。 九、外围设备 外围设备如键盘、鼠标、打印机等采用中断请求的方式来实现实时处理。图片显示是往主存的一部分空间写入数据来显示,现在是有独立显卡来处理。 总结:从沙子到纯硅到晶圆到光蚀到芯片到cpu,把一堆ic堆在一起形成可以计算的硬件;再想出方法把现实世界的数据和这些硬件联系起来表示出来,找到最简单的方法就是二进制数,然后需要通过各种编码和规范把字母、文字、小数都能表示出来。这时候除了快速运算的cpu还需要东西存储,就分为了速度快的内存和速度慢的磁盘。因为很多时候数据的表示有很多事重复的东西,在传输或者保存等情况下需要体积小,所以可以通过算法算出另一种表示方法去记录。这种算法分成可逆和不可逆的算法,不可逆如jpeg等图片格式。有了这一切以后,大家都可以写程序去计算数据了。但因为有很多非常底层的东西既非常深奥又经常被大家重复使用,于是就把这部分抽象化做出了操作系统。有了系统以后还有很多.dll文件事后面丰富的一些通用的处理函数。但因为操作系统也可以写出很多,也有些高级编程语言为了兼容不同操作系统,自己再抽象一层,对每个操作系统又封装了自己的一套方式,例如jvm,只要各系统都装上它,程序就可以开发一次,到处使用。这些都完善之后,计算机的运算基本完善,但是还缺少控制输入和输出的方式,于是对于外围设备采用了中断请求的方式去做交互,只要你来找我,我才去理你,而不是时刻都在关心你在干什么。然后外围设备有很多,类型也有很多,于是给每个厂家都给了一套统一的操作系统要求的规范。不过你自己怎么设计和运行你的硬件,反正同样的硬件和功能要按照我的规范可以使用,或者你给我一个翻译包,我就知道使用你,这就是驱动程序。完。

Yoona_佳琪

【 程序是怎样跑起来的·总结】 本书最推荐的part:简介明了的配图 比较基础,系统的捋了一遍计算机系统的基础知识,但是对于完全小白有难度。特别是进制的part。补充的part有小数的表示,压缩文件,内存磁盘 “程序”核心: 程序地址 程序流程 数据地址 数据值 cpu(一堆寄存器组成)<—内存(缓存程序和数据)<—磁盘 cpu(一堆寄存器➕控制器(读 写 存)➕运算器➕标志器) 运行环境=操作系统 + 硬件(AT兼容机) 源代码(哪都能运行)—编译—>本地代码(对应os)—链接—>exe文件,CPU解释运行 程序(源代码)—API—>OS—PORT“移植”根据环境编译源代码,CPU解释运行—>硬件(机器语言,本地代码,目标文件) 应用程序向操作系统传递指令的途径称为API(Application Programming Interface) 操作系统是多个程序的集合体 这里,我希望制作应用的程序员们意识到一点,那就是你们制作的不是硬件,而是利用操作系统功能的应用。虽然对程序员来说,掌握硬件的基本知识是必需的,不过,在操作系统诞生以后,就没有必要再编写直接控制硬件的程序了。这样一来,制作应用的程序员就逐渐同硬件隔离开来了。也就是说,程序员是很少关注现实世界(硬件)的。 文件是操作系统对磁盘媒介空间的抽象化。 程序是操作系统、中间件、应用等所有软件的统称。 复习时,看书签即可,每章开头热身问答

吴孟达

读这本书最大的收获是想去看《深入理解计算机系统》了,内容范畴类似,搭配上作者的另一本《计算机是怎样跑起来的》,可以说是丐版CSAPP了,适合手机阅读,专业人士可以温故知新,新手可以在读CSAPP之前,先读这两本,由浅入深,循序渐进。

iHTC

花了半年认真再读完本书!竟然只用了22小时,还不到24小时。 看完本书,有一种大学重新学习的感觉,从C语言,到操作系统,到编译原理,到汇编语言,到CPU,到IC(集成电路)。 可以在延伸到物理学,高低电平,与或非异或门! 也可以延伸到数学系,数据结构,加解密算法,压缩算法,缓存算法,AI(人工智能)算法! 本书是一本基础又不乏深入的书,虽然有一些内存已经过时,比如软盘、光盘、Win95、98、xp、32位等,但是,本书真的解答了“程序是怎样跑起来的”!书中有非常多精灵的图片,形象生动活泼的描述计算机的本质! 最后,阅读本书第一次肯定有很多不解的问题或章节,可以先跳过或寻找其它书籍帮助,比如汇编语言,如果不事先了解汇编语言,可能还是很难从本书学到汇编语言的理解。 当然,书本不是阅读一次就抛弃!好的书!需要温故而知新!多读几篇又何妨! 学到老!活到老!计算机!程序员!加油!👍🙏🥳🎉

本书最推荐的part:简介明了的配图 比较基础,系统的捋了一遍计算机系统的基础知识,但是对于完全小白有难度。特别是进制的part。补充的part有小数的表示,压缩文件,内存磁盘 “程序”核心: 程序地址 程序流程 数据地址 数据值 cpu(一堆寄存器组成)<—内存(缓存程序和数据)<—磁盘 cpu(一堆寄存器➕控制器(读 写 存)➕运算器➕标志器) 运行环境=操作系统 + 硬件(AT兼容机) 源代码(哪都能运行)—编译—>本地代码(对应os)—链接—>exe文件,CPU解释运行 程序(源代码)—API—>OS—PORT“移植”根据环境编译源代码,CPU解释运行—>硬件(机器语言,本地代码,目标文件) 应用程序向操作系统传递指令的途径称为API(Application Programming Interface) 操作系统是多个程序的集合体 这里,我希望制作应用的程序员们意识到一点,那就是你们制作的不是硬件,而是利用操作系统功能的应用。虽然对程序员来说,掌握硬件的基本知识是必需的,不过,在操作系统诞生以后,就没有必要再编写直接控制硬件的程序了。这样一来,制作应用的程序员就逐渐同硬件隔离开来了。也就是说,程序员是很少关注现实世界(硬件)的。 文件是操作系统对磁盘媒介空间的抽象化。 程序是操作系统、中间件、应用等所有软件的统称。 复习时,看书签即可,每章开头热身问答

霏 Cathy

程序是怎样跑起来的 矢泽久雄 3个想法 ◆ 第5章 内存和磁盘的亲密关系 >> 1.存储程序方式指的是什么?2.通过使用内存来提高磁盘访问速度的机制称为什么?3.把磁盘的一部分作为假想内存来使用的机制称为什么?4.Windows中,在程序运行时,存储着可以动态加载调用的函数和数据的文件称为什么?5.在EXE程序文件中,静态加载函数的方式称为什么?6.在Windows计算机中,一般磁盘的1个扇区是多少字节? >> 1.在存储装置中保存程序,并逐一运行的方式2. Disk Cache (磁盘缓存)3.虚拟内存(virtual memory)4. DLL (DLL文件)5.静态链接6. 512字节 >> 函数的加载方式有静态链接和动态链接两种。 才開始看這本理性唉,看了書評也容易理解也感謝,以上想法是沒學過的,以後多看

知之

程序运行过程大致描述,没有深入讲解,好几个地方想深入了解时却戛然而止,只能网上搜索了解。其中还夹杂着浮点数、压缩、ai等内容,与程序怎么运行关系不大。总的来说,对我已有知识有一定的巩固,但并没有达到预期效果

不知道读一本23万字的书用时17小时算不算囫囵吞枣,但这本字数一半的实用型读物却让我仔细投入了12小时,其中既有破疑解惑的不懈思索,也有追忆往昔的怅然若失。诸多感慨,困于自身文笔,只在此简述。 一、关于书本 本书的逻辑结构十分清晰,如庖丁解牛般切入主题。除此之外,还有三点值得推荐,首先是在讲解前提出问题,让人带着思考阅读,同时高频出现一些cpu、内存热词,吸引读者兴趣。其次,文中多用c语言、汇编语言实例,并能做到逐条逐码解析,对有语言基础人士学习理解更加友好。最后是作者诙谐幽默的语气,歌德说读一本好书,就是和许多高尚的人谈话,阅读此书全没有一对一家教般的严肃,取而代之是兴趣小组活跃的交流气氛。 二、关于自身 本人在大学时曾学习相关知识,但时过境迁,参与工作与当初专业性质差距过大,导致相关知识遗漏较多,在最近阅读中,不光是模糊的知识点变得清晰,校园生活的琐碎画面也尝尝浮于脑海,以至于偶有发呆走神(这可能也占用了读书时间)。对比现在的读书状态,当时青涩的自己还是过于浮躁,如果当时能更加刻苦,是否现在人生轨迹会有所不同,但细想想,是否过于浮躁的不仅是读书学习呢?唉,被酒莫惊春睡重,赌书消得泼茶香,当时只道是寻常。 三、关于他人 最后,我想聊聊读这本书给我印象最深的两个人,一是一位书友,作者在第9章写到,向超喜欢手机的女高中生讲解操作系统的作用,本是普通一句话,却引得书友上升到女性认知的层面,让我很不解,这也是本书困扰我问题的其中之一。二是王小波先生,在读《爱你就像爱生命》时,了解到王先生在上世纪九十年代就已经开始编程学习,不禁感慨优秀之人优点绝非一二,自己还需更加努力,争取迎头赶上才是。

刘涛

对编程的基本物件温习了一遍,跳过了汇编和硬件控制两个章节。 CPU、二进制、浮点数、内存、磁盘、压缩、编译器等等这些跟编程相关的部分值得认真理解,对于编程非常有好处。 对于决定走技术路线的人来说,书中的内容仅仅给出了索引式的介绍,还需沿着每一部分深入进去,而对于大多数程序员,书中的内容已足够,毕竟现在针对业务的实现中编写程序根本不会接触这些也能完成的很好。

爱读书的程序员

作为一个程序员,刚开始其实很排斥这类原理书的,现在做了几年开发,越来越明白程序背后原理的重要性,正好赶上我阅读习惯转变之时,来的正好,以后就多多阅读这类书籍吧,不再搞那些鸡汤和历史书。鲁迅说的好啊,哪有什么天才,只是把别人喝咖啡的时间用在专业上了。专业性,就是这么来的。

野漫横江

看了两周,终于看完了第一遍,总算对程序是怎样跑起来的有了一些较为全面的了解,简直是我硬件的启蒙书籍啊!希望日后再看到,会有新的收获~ 做个小总结吧,如有不对恳请书友指出~ 数据在计算机的存储,执行,在芯片内部都是一个个电路开关; 0与1实际上是物理电信号高低电位的映射; 为了解决负数计算如1 + (-1),于是产生了补码; 二进制与十进制,都是对同一种数据的不同表达形式,而计算机内部使用二进制,是与其内部构造使用高低电位来表达两种状态而选择的最恰当的方式; 应对生活中的小数,计算机也有浮点数表达方式。在32位的数据中,IEEE规定了浮点数的表达方式,其中1位符号位,8位指数位23位尾数。这曾经浮点数也让我产生了一些错误认知,我一度以为它在计算机内可以表示任意数值,因为数学告诉我在非0长度的区间,数应该是无限的。但现在才能理解,32位数据这意味着其表示范围只有2^32个数,并不是无限的。二进制浮点数不可能表示任意小数,它也面临着精度问题,就像十进制小数也不能准确表达1/3一样; 由于计算机只能处理数字,所以人类生活中的字符,符号,全都靠的是编码映射。这也是计算机擅长的处理方式; 函数的调用栈,目的是切换指令的上下文环境,解决了程序执行顺序的问题。也帮助了寄存器清除局部变量; 内存造价昂贵,数据读取速度快,而硬盘较为低廉,数据读取速度慢。但较为低廉这意味着我们花同样的价钱,可以买到容量较大的硬盘。我们可以把文件、程序存储在硬盘,需要用到时再读取内存让cpu运行计算; 扇区是硬盘物理读写的最小单位,一个扇区一般为512字节。在windows中,硬盘读写单位是扇区的整数倍,称为簇,不同的文件不能存放在同一簇中。因此不管是多小的文件,都会占用1簇的空间。所以你会发现如果一个文件夹里有非常多的细碎小文件并且总共容量很大的话,无论是对这个文件夹进行复制或是删除操作,花费的时间都相对漫长,但如果把文件夹打包成压缩包形成一个整体再进行复制或是删除操作,速度将大大加快; 数据含有重复表达的信息,这意味着浪费了内存,于是为了降低这样的浪费,就有人提出了数据压缩。数据压缩分为可逆压缩和非可逆压缩。比如图片有损压缩方面,如jpg格式等,压缩数据基本不会影响图片效果,同里也有音频的mp3格式等。但文本数据以及程序则必须使用可逆压缩,否则原有的信息缺失将无法得到正确的表达。哈夫曼编码则是经典的可逆压缩算法; 程序不能直接操作硬件,而是调用操作系统提供的接口进行间接操作。不同CPU架构的指令集可能不同,这也就意味着编译出的程序在不同操作系统下可能无法正常运行,因为指令集无法正确被其CPU处理,于是延伸出了程序如何实现跨平台运行的问题。跨平台有两种方式,源码级别的跨平台以及虚拟环境的跨平台。源码级别的跨平台,在Unix的FreeBSD存在一种叫做Ports的机制,能够根据当前的运行环境来编译出对应系统能够运行的本地代码。简称一次编写,到处编译; 这种方式略微繁琐,于是又出现了虚拟运行环境的东西,如Java的虚拟机。Java编译后会产生统一的字节码,我的理解是字节码就相当于为指令集提供了一种抽象,而Java在不同操作系统都提供了Java虚拟机,它负责把字节码转变为对应架构的指令集,转译成本地代码。相当于Java虚拟机代替我们完成了Ports的机制处理,实现了一次编写,到处运行。然而Java的二次转译也意味着同样流程的程序分别使用C/C++与Java编写,执行效率一般来说不会超过C/C++这样不需要经过二次转译的语言; 程序也占内存,浩如烟海的程序中往往也有很多实现了同样逻辑的api。这样数据就造成了冗余,浪费了内存。于是在windows中,动态链接库DLL解决了这样的问题。只需要提供了完成某些功能封装好的api,开发者只需要使用其api即可顺利完成其功能,并且所有需要实现此功能的程序都可以共同使用这个DLL,这也就减少了内存浪费。并且可以做到功能的局部更新(只需要更新相应的DLL文件即可); 随机数也并不是真随机,而是借助计算公式得出。如果提供一致的参数,理论上可以推演出下一步的结果; 中断是异步编程的通信方式。CPU一旦接到中断型号,就会把寄存器中所有的数据保存在内存的栈中,然后执行中断处理程序。执行中断程序完毕后,则将栈中数据弹出。这样就完成了上下文的切换。而为了防止多个设备同时进行中断请求,所以计算机引入了中断控制器来进行缓冲,将中断请求有序的传递给CPU;

huangle

大概讲了计算机组成原理的重要概念和整体结构,但是内容比较简单直白,避免过多细节但是却让某些复杂的内容不甚清晰(比如内存和缓存机制,函数调用的寄存器部分),还有一些必要的比如性能优化、分支冒险等内容加上会更好,想深入了解组成原理的话,还是可以多看几遍极客上的《深入浅出计算机组成原理》。

翟岩慧

给四年级的小学生讲完这本书了,但章节重新安排过,把程序运行相关的章节安排到一起。程序和汇编的对应以及指令的执行是本书的亮点、重点和难点,有趣有料,值得一看;二进制转换不太好理解,涉及的数学超过了孩子的理解能力。 总体来看,本书还算是通俗易懂,但因为涉及编译原理,操作系统,汇编,组成原理等内容,细节不够的时候始终有隔靴搔痒的感觉,同时又缺乏实验来促进理解,最后可能只留下一个概念或者印象。要是能有类似于《我的第一本算法书》那样搭配的APP就完美了。 不管怎么样,本书可以作为《深入理解计算机系统》的入门版和科普版。

路易大叔

一本计算机原理入门书籍,主要是给门外汉进行科普吧,初学者也可以稍作参考。简单翻了翻,主要是用来怀旧了,计算机专业浸yin七载,可惜终究是错付了。

暂时没有数据