noHup - programming
type: channel
link: http://chris.nohup.cc/tag/programming/
items: 编程札记（一）

编程札记（一）
type: item
date: 2015-11-30T04:37:00+00:00
description: Overview1. 计算机的结构1.1 内存和硬盘的区别：1.2 CPU、内存和硬盘1.3 内存的使用1.4 32位系统 or 64位系统 Overview 之前跟Young一起做上一个项目时，遇到和解决了很多小的但是又很常见的编程问题，做完项目想总结一下的时候又发现这是一系列问题，没有太多明确的界限，又好像存在于编程的每一个细节中，我觉得应该统称为编程的基础。 一直说要写，可总觉得无从下笔。现在下决心尝试一下，想到哪里就写到哪里吧~ 1. 计算机的结构 现在的计算机依然采用的是冯·诺依曼提出的计算机体系结构。计算机由控制器、运算器、存储器、输入设备、输出设备五部分组成。其中控制器和运算器一起组成了CPU，存储器可以分为内存和硬盘，输入设备就是鼠标键盘麦克风等，输出设备主要是显示器一类的设备。 1.1 内存和硬盘的区别： 写这个的时候我内心是挣扎的，因为可能一眼看起来显得很low，但是这确实是我在接触计算机的过程中遇到的一个困惑，在这里记下来，说不上能解决谁的困惑呢。 简单来说，内存和硬盘都是用来存储东西的，只是由于他们的材质不同，导致他们存储东西的失效和存取效率不同，因此在计算机中的用途也就不同。 内存的主要材质是RAM（Ramdom Access Memory，即随机存取存储器），特点是存储空间小，高速存取，读写时间相等，且与地址无关（即可以随机存取），易挥发性。但是存储信息具有瞬时性，断电之后信息就会完全丢失，这就是为什么台式机忽然断电，你正在编辑的东西如果没保存就全没了，除非你已经保存到了硬盘上。 与RAM容易混淆的是ROM（Read Only Memory，即只读存储器），从它的名字就可以知道，ROM与RAM最大的区别在于ROM是只读的，但是断电之后信息不丢失，因此通常被用来做计算机启动用的BIOS芯片，存取速度相对于RAM来说比较低。 这里说的ROM的只读，并不是说完全不能写，BIOS里的信息不就是写进去的嘛，而且我们经常也会听到刷BOIS，其实就是把BOIS的信息更改，也就是更新ROM中的信息。只是相对于RAM，ROM不适合频繁写而已。 硬盘的特点是存储空间大（现在家用硬盘都是1T+），按址存取，存取速度慢，永久保存数据。在出现固态硬盘前，机械硬盘就是硬盘的代名词，跟RAM可以说是对立的存在。 机械硬盘的工作原理跟CD，唱片机等一样，就是一个盘在转，有一个接触盘的磁头读取接触到的区域的信息。只是机械硬盘是一个立体的结构，里面有很多层类似于盘的面，信息的读取就是靠磁头的移动和磁盘的转动实现。知道了机械硬盘的结构，也就能理解它的特点了，因为磁头要动，盘面要转动，所以机械硬盘的动静很大，发热多，不耐摔（一不小心就把磁头摔坏了）。 速度也很大程度上取决于盘面的旋转速度，盘面旋转速度越快，读取信息自然也就越快，买机械硬盘时，硬盘转速可以说是最重要的指标，5400转/秒（没有更低的了），7200转/秒（主流），12000转/秒（企业级硬盘）。 固态硬盘的存在可以说是内存和机械硬盘的折衷，存储空间没有机械硬盘大，但是可以实现随机读取，性能上相对于机械硬盘有了质的飞越，由于固态硬盘没有了磁盘和磁头这些东西，所以机械硬盘那一系列缺点固态硬盘都没有，一定要说缺点的话，那就是存储空间还不够大，贵。不过从它的缺点来看，它应该是未来的趋势，毕竟有些缺点代表过去，而价格贵空间不够大这些问题，未来多半都能解决，从CPU，硬盘的发展我们已经无数次的看到了这一点。 一句话解释就是，开着计算机，操作系统和其他程序运行时需要的东西都要load到内存中，想要永久保存的东西，都需要从内存中写到硬盘上。 既然所有的程序都是CPU计算，内存只是帮CPU存着结果，那一个程序运行时，CPU和内存以及硬盘又是怎么协作的呢。 1.2 CPU、内存和硬盘 在任何一本计算机组成原理教材中，输入和输出设备都是很简略的，因为真的没有太多需要说的，如果一定要说，我更想解释机械键盘，高清显示屏这些东西对程序员的重要性~ 一个程序在运行时（不考虑输入和输出），实际上就是CPU、内存和硬盘的协作过程。 计算机要执行一个程序，需要先把这个程序，程序运行需要的数据等从硬盘导入到内存中，运行结束之后，产生的数据还需要重新写入硬盘永久保存。因此，内存可以看做是CPU和硬盘之间的混缓冲池，CPU是不会直接和硬盘交换数据的，因为硬盘读取的速度太慢了。 但是CPU和内存之间的交换依然存在问题，因为内存这些年的发展也就是变大变大变大，在读写速度上没有什么改进，毕竟材质摆在那里。而CPU的发展日新月异，不只主频越来越高，CPU核数也越来越多，计算能力越来越强，单位时间可以计算的数据量也就越来越大。CPU实际在做运算时，是需要把数据从内存load到CPU中的寄存器中的，随着CPU性能的提升，单位时间…