随笔分类 - Other
摘要:如果逻辑控制流在时间上重叠,那么它们就是并发的。 使用应用级并发地应用程序称为并发程序。现代操作系统提供了三种基本的构造并发程序的方法: 进程。用这种方法,每个逻辑流都是一个进程,由内核来调度和维护。因为进程有独立的虚拟地址空间,想要和其他流通信,控制流必须使用某种显式的进程间通信(IPC)机制。
阅读全文
摘要:IP地址 一个IP地址就是一个32位无符号整数。 struct in_addr { uint32_t s_addr; }; TCP/IP为任意整数数据项定义了统一的网络字节顺序(大端字节序)。Unix提供了函数在网络和主机字节顺序间实现转换。 #include <arpa/inet.h> uint3
阅读全文
摘要:Unix I/O 一个Linux文件就是一个m个字节的序列。所有的I/O设备都被模型化为文件,所有的输入和输出都被当做相应文件的读和写来执行。 打开文件。一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个I/O设备。内核返回一个小的非负整数,叫做描述符,它在后续对此文件的所有操作中标识这个
阅读全文
摘要:动态内存分配 造成堆利用率很低的主要原因是一种成为碎片的现象。 内部碎片是在一个已分配块比有效载荷大时发生的。一个分配器的实现可能对已分配块强加一个最小的大小值,而这个大小要比某个请求的有效载荷大。在任何时刻,内部碎片的数量只取决于以前请求的模式和分配器的实现方式。 外部碎片是当空闲内存合计起来足够
阅读全文
摘要:最简单的控制流是一个平滑的序列,而平滑流的突变通常是由诸如跳转、调用和返回这样一些程序指令造成的。此外系统还必须能够对系统状态的变化做出反应,这些系统状态不是被内部程序变量捕获的,而且也不一定要和程序的执行相关。如,一个硬件定时器定期产生信号、当子进程终止时,创造这些子进程的父进程必须得到通知。 现
阅读全文
摘要:链接是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行。链接可以执行于编译时、加载时、运行时。 链接器使得分离编译成为可能。当改变模块时,只需简单地重新编译它,并重新链接应用,而不必重新编译其他文件。 编译器驱动程序 GCC驱动程序命令: linux> gc
阅读全文
摘要:链接是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行。链接可以执行于编译时、加载时、运行时。 链接器使得分离编译成为可能。当改变模块时,只需简单地重新编译它,并重新链接应用,而不必重新编译其他文件。 编译器驱动程序 GCC驱动程序命令: linux> gc
阅读全文
摘要:对齐 计算机系统对基本数据类型的可允许地址做出了一些限制,要求某种类型的对象的地址必须是某个值k的倍数。这种对其限制简化了处理器和存储器系统之间的接口的硬件设计。无论数据是否对齐,x86-64硬件都能正确工作。不过,Intel还是建议要对齐数据以提高内存系统的性能。对齐原则是任何K字节的基本对象的地
阅读全文
摘要:打印程序对象的字节表示 使用强制类型转换来规避类型系统。 #include <stdio.h> typedef unsigned char *byte_pointer; void show_bytes(byte_pointer start, size_t len) { size_t i; for (
阅读全文
摘要:过程 一个过程调用包括将数据(以过程参数和返回值的形式)和控制从代码的一部分传递到另一部分。另外,它还必须在进入时为过程的局部变量分配空间,并在退出时释放这些空间。 程序用程序栈来支持过程调用。栈用来传递过程参数、存储返回信息、保存寄存器以供以后恢复之用,以及用于本地存储。为单个过程分配的那部分栈称
阅读全文
摘要:信息就是位+上下文 系统中所有的信息,包括磁盘文件、存储器中的程序、存储器中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。 程序被其他程序翻译成不同的格式 翻译的过程是分为四个阶段完成的。执行这四个阶段的程序(预处理器、编译器、
阅读全文