
理解计算机系统
文章平均质量分 78
JJDiaries
JJ diaries-still-always-forever
展开
-
Linux 的启动流程
半年前,阮一峰写了《计算机是如何启动的?》,探讨BIOS和主引导记录的作用。那篇文章不涉及操作系统,只与主板的板载程序有关。今天,阮一峰接着往下写了 Linux 的启动流程,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程。这个部分比较有意思。因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多;但是,一旦进入操作系统,程序员几乎可以定制所有方面。所转载 2013-09-19 09:32:57 · 702 阅读 · 0 评论 -
汇编语言里 eax, ebx, ecx, edx, esi, edi, ebp, esp
eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。如果用C语言来解释,可以把这些寄存器当作变量看待。比方说:add eax,-2 ; //可以认为是给变量eax加上-2这样的一个值。这些32位寄存器有多种用途,但每一个都有“专长”,有各自的特别之处。EAX 是"累加器"(accumu转载 2013-09-26 17:32:53 · 1121 阅读 · 0 评论 -
main 函数是怎样运行的
StartingThe question is simple: how does linux execute my main()?Through this document, I'll use the following simple C program to illustrate how it works. It's called "simple.c"main(){转载 2013-09-26 17:08:11 · 1072 阅读 · 0 评论 -
进程与线程的一个简单解释
作者: 阮一峰日期: 2013年4月24日进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。1.计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。2.假定工厂的电力有限,一次只能供转载 2013-09-21 10:05:13 · 838 阅读 · 0 评论 -
互联网协议入门(二)
作者: 阮一峰日期: 2012年6月11日上一篇文章分析了互联网的总体构思,从下至上,每一层协议的设计思想。这是从设计者的角度看问题,今天我想切换到用户的角度,看看用户是如何从上至下,与这些协议互动的。==============================================================互联网协议入门(二)转载 2013-09-20 08:57:24 · 872 阅读 · 0 评论 -
四位计算机的原理及其实现
作者: 阮一峰日期: 2011年3月12日你是否想过,计算机为什么会加减乘除?或者更直接一点,计算机的原理到底是什么?Waitingforfriday有一篇详细的教程,讲解了如何自己动手,制作一台四位计算机。从中可以看到,二进制、数理逻辑、电子学怎样融合在一起,构成了现代计算机的基础。一、什么是二进制?首先,从最简单的讲起。计算机内部采用二进转载 2013-09-20 08:53:55 · 1418 阅读 · 0 评论 -
字符编码笔记:ASCII,Unicode和UTF-8
作者: 阮一峰日期: 2007年10月28日今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得转载 2013-09-20 08:52:29 · 738 阅读 · 0 评论 -
互联网协议入门(一)
作者: 阮一峰日期: 2012年5月31日我们每天使用互联网,你是否想过,它是如何实现的?全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗?互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite)。它们对电转载 2013-09-20 08:56:59 · 866 阅读 · 0 评论 -
浮点数的二进制表示
作者: 阮一峰日期: 2010年6月 6日1.前几天,我在读一本C语言教材,有一道例题: #include void main(void){ int num=9; /* num是整型变量,设为9 */ float* pFloat=# /* pFloat表示num的内存地址,但是设为浮点数 */转载 2013-09-20 08:53:41 · 826 阅读 · 0 评论 -
关于2的补码
作者: 阮一峰日期: 2009年8月 5日问一个基本的问题。负数在计算机中如何表示?举例来说,+8在计算机中表示为二进制的1000,那么-8怎么表示呢?很容易想到,可以将一个二进制位(bit)专门规定为符号位,它等于0时就表示正数,等于1时就表示负数。比如,在8位机中,规定每个字节的最高位为符号位。那么,+8就是00001000,而-8则是10001转载 2013-09-20 08:53:09 · 916 阅读 · 0 评论 -
字符编码浅谈
你是否认为“ASCII码 = 一个字符就是8比特”?你是否认为一个字节就是一个字符,一个字符就是8比特?你是否还认为你是否还认为UTF-8就是用8比特表示一个字符?如果真的是这样认为认真读完这篇文章吧!为什么要有编码?首先大家需要明确的是在计算机里所有的数据都是字节的形式存储,处理的。我们需要这些字节来表示计算机里的信息。但是这些字节本身又是没有任何意义的,所以我们需要对这些字节赋转载 2013-09-20 08:50:43 · 670 阅读 · 0 评论 -
计算机是如何启动的?
从打开电源到开始操作,计算机的启动是一个非常复杂的过程。 我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示...... 这几天,我查了一些资料,试图搞懂它。下面就是我整理的笔记。零、boot的含义 先问一个问题,"启动"用英语怎么说? 回答是boot。可是,boot原来的意思是靴子,"启动"与靴子有什么关系呢? 原来,这里的boot是转载 2013-09-19 09:26:13 · 697 阅读 · 0 评论 -
hello world是怎样运行的?
关于《深入理解计算机系统》“这本书的中译名为“深入理解计算机系统”,我非常,十分,以及百分之一百二十地不满意。我这么说的原因在于这个译法完全扭曲了书的本意。如果直译原书名,应该是类似于“以程序员的视角理解计算机系统”,何来“深入”二字。可能在国内编辑看来,这是讲系统的,用C和汇编语言的,因此很“深入”,但我认为这只能说明国内技术氛围的浅薄。因为事实上,这是一本入门级别的书,这本书其实并不“原创 2013-10-13 09:21:05 · 1760 阅读 · 0 评论