摘要: 构建并发服务器的方法:在父进程中接收客户端连接请求,然后创建一个新的子进程来为每个新客户端提供服务。 假设现在有两个客户端和一个服务器,服务器正在监听一个监听描述符上的连接请求。并发过程如下: 1、服务器接受客户端1的连接请求 2、服务器派生一个子进程为这个客户端1服务 3、服务器接受另一个客户端2 阅读全文
posted @ 2019-01-27 15:53 凌晨六点半 阅读(202) 评论(1) 推荐(0) 编辑
摘要: 每个网络应用都是基于客户端-服务端模型的。根据这个模型,一个用用是由一个服务器和一个或多个客户端组成的。服务器管理资源,以某种方式操作资源,为客户端服务。例如,一个Web服务器管理着一组磁盘文件,它会代表客户端进行检索和执行。 客户端-服务端模型中的基本操作是事务。一个客户端-服务器事务由以下四步组 阅读全文
posted @ 2019-01-27 15:18 凌晨六点半 阅读(151) 评论(0) 推荐(0) 编辑
摘要: Unix/ I/O: 这种将设备优雅地映射为文件的方式,允许Linux内核引出一个简单、低级的应用接口,成为Unix I/O,这使得所有的输入和输出都能以一种统一且一致的方式来执行: 1)打开文件 2)Linux shell创建的每个进程开始时都有三个打开的文件: 标准输入、标准输出、标准错误 3) 阅读全文
posted @ 2019-01-20 18:34 凌晨六点半 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 物理地址和虚拟地址: 计算机的主存被组织成一个由M个连续的字节大小的单元组成的数组。每个字节都有一个唯一的物理地址(PA)。第一个字节地址为0,接下来为1,再接下来为2,依次类推。CPU访问内存的最自然方式就是使用物理地址。我们把这种方式称为物理寻址。如图所示。 现代处理器使用一种称为虚拟地址的寻址 阅读全文
posted @ 2019-01-13 11:21 凌晨六点半 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 随机访问存储器: 1、静态RAM:每个位存储在双稳态的存储器单元里。 2、动态RAM:每个位存储为对一个电容的充电。 3、传统的DRAM 4、内存模块 5、增强的DRAM 6、非易失性存储器:即使关电,仍然保存着信息。固态硬盘基于非易失性的闪存,对某些应用来说,极其受欢迎。 存储器层次结构: 局部性 阅读全文
posted @ 2019-01-06 18:40 凌晨六点半 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 进程控制: 每个进程都有一个唯一的整数进程PID。 进程一般可认为处于以下三种状态:运行、停止、终止; 父进程可以通过调用fork函数创建一个新的运行的子进程。父进程和新创建的子进程之间最大的区别在于它们有不同的pid。 fork函数具有以下几个特点: 1、调用一次,返回两次。一次返回给父进程,一次 阅读全文
posted @ 2019-01-06 18:26 凌晨六点半 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 异常控制流: 在硬件层,异常是由处理器中的事件触发的控制流中突变。控制流传递给一个软件处理程序,该处理程序进行一些处理,然后返回控制给被中断的控制流。 异常就是控制流中的突变,用来响应处理器状态中的某些变化。异常处理过程如下: 每个异常都分配了一个唯一的非负整数的异常号。在运行时,处理器检测发生了一 阅读全文
posted @ 2019-01-06 17:45 凌晨六点半 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 数据传送: 当过程P调用过程Q时,P的代码必须首先把参数复制到适当的寄存器中。类似的,当Q返回到P时,P的代码可以访问寄存器中的返回值; 每个过程调用在栈中都有它自己的私有空间,因此,多个未完成调用的局部变量不会相互影响。当过程被调用时分配局部存储,当返回时释放存储; 数组的分配和访问: 对于数据类 阅读全文
posted @ 2018-11-18 16:14 凌晨六点半 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 数据传送指令: MOV指令:将数据从源位置复制到目的位置,不做任何变化;MOV指令由四条指令组成:movb、movw、movl、movq;它们的区别在于它们操作的数据大小不同,分别为1、2、4、8字节; 压入和弹出栈数据: 遵循“后进先出”原则,通过push操作将数据压入栈中,通过pop操作删除数据 阅读全文
posted @ 2018-11-11 18:55 凌晨六点半 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 计算机执行机器代码,用字节序列编码低级的操作。汇编代码是机器代码的文本表示。 程序编码: linux> gcc -Og -o p p1.c p2.c 命令gcc即GCC C编译器。使用gcc命令将源代码转换成可执行代码。首先,C预处理器扩展源代码,插入所有用#include命令指定的文件,并扩展所有 阅读全文
posted @ 2018-11-04 20:21 凌晨六点半 阅读(301) 评论(0) 推荐(0) 编辑