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