随笔分类 - 计算机系统
摘要:在Linux系统中,read和write传送的字节比应用程序要求的要少。这些不足值不表示有错误,出现这种问题的原因有: 读时遇到了EOF。假设我们准备读取一个文件,该文件从当前位置开始只有20个字节,而我们以50个字节的片进行读取。这样一来,下一个read返回的不足值为20,此后的read将通过返回不足值0来发出EOF信号。 从终端读文本行。如果打开文件是...
阅读全文
摘要:链接是将各种代码和数据部分收集起来并且组合成一个单一文件的过程,这个文件可以被加载到存储器并执行。 整个编译的过程是:预处理,编译,汇编,链接。链接后生成可执行的目标文件,汇编后生成的目标文件被链接器使用,结合成可执行的目标文件。 目标文件有三种形式可重定位的目标文件:包含二进制代码和数据,其形式可以再编译时与其他可重定位的目标文件合并起来,创建一个可执行目标文件。通常对一个程序模块进行汇编以后,生成的就是可重定位的目标文件。可执行目标文件:包含二进制代码和数据,可以直接拷贝到存储器并执行。共享目标文件:可以再加载或者运行时被动态的加载到存储器并链接。总结一下其实就是编译器和汇编器一起生成可.
阅读全文
摘要:1 异常 异常是异常控制流的一种形式,它一部分是由硬件实现的,一部分是由操作系统实现的。异常就是控制流中的突变,用来响应处理器状态中的某些变化。在处理器中,状态被编码为不同的位和信号。状态变化称为事件event,事件可能与当前指令的执行直接相关。比如发生虚拟存储器的换页,算数溢出,或者一条指令试图除以零。另一方面,事件也可能和当前指令的执行没有关系。比如一个系统定时器产生信号或者一...
阅读全文
摘要:字节作为最小的可寻址的单位,而不是位bit。机器级程序将存储器看做一个非常大的数组,成为虚拟存储器。存储器的每个字节都由一个唯一的数字来标识,称为它的地址,所有可能的地址的集合就叫虚拟地址空间virtual address space。虚拟地址的主要目的就是展现给程序一个概念性的映像,将访问内存,磁盘,特殊硬件结合起来,为程序提供一个看上去统一的字节数组。 C编译器还把每个指针和类型信息联系起来,这样就可以根据指针的类型,生成不同的及其级代码来存储指针所指向的数据。尽管C编译器维护者这个类型信息,但是它生成的机器级程序并不在乎数据类型的信息。每个程序对象都可以简单视为一个字节块。 与变...
阅读全文