![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深入理解计算机系统
worthsen
Just do it!
展开
-
大端小端
大端小端1 介绍1.1 简介1.2 举例1.3 小端的好处2 大端小端的具体应用3 字节序转换参考1 介绍1.1 简介计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)。举例来说,数值0x2211使用两个字节储存:高位字节是0x22,低位字节是0x11。大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。小端字节序...原创 2019-10-23 06:35:04 · 2528 阅读 · 0 评论 -
深入理解计算机系统之十: 并发编程(代码示例)
一、代码//#include <stdio.h>#include <stdlib.h>#include <pthread.h>/* define struct */struct member{ int num; char *name;};/* 定义线程pthtead */static void *pthread(void *arg...原创 2018-05-24 12:14:57 · 317 阅读 · 0 评论 -
深入理解计算机系统之十: 并发编程(4)
七、使用线程提高并行性到目前为止,在对并发的研究中,我们都假设并发线程是在单处理器系统上执行的。然而,大多数现代机器具有多核处理器。并发程序通常在这样的机器上运行更快。因为操作系统内核在多个核上并行地调度这些并发线程,而不是在单个核上顺序地调度。在像繁忙的Web服务器、数据库服务器和大型科学计算机代码这样的应用中利用这样的并行性是至关重要的,而且在像Web浏览器、电子表格处理器程序和文档处理程...原创 2018-05-26 17:30:19 · 477 阅读 · 0 评论 -
深入理解计算机系统之十: 并发编程(3)
六、用信号量同步线程共享变量是十分方便,但是它们也引入了同步错误(synchronization error)的可能性。///* WARING: This code is buggy */#include "csapp.h"void *thread(void *vargp); /* thread routine prototype *//* globle shared var...原创 2018-05-26 16:29:56 · 619 阅读 · 0 评论 -
深入理解计算机系统之十: 并发编程(2)
四、基于线程的并发编程1、线程的简介(1)多进程并发编程中,我们为每个流使用了单独的进程。内核会自动调度每个进程,而每个进程有自己的私有地址空间,这使得流共享数据很困难。I/O复用并发编程中,我们创建自己的逻辑流,并利用I/O多路复用显式地调度流。因为只有一个进程,所有的流共享整个地址空间。线程是这两种方法的混合。(2)线程(thread)就是运行在进程上下文中的逻辑流。线程由内核...原创 2018-05-26 16:28:08 · 578 阅读 · 0 评论 -
深入理解计算机系统之十: 并发编程(信号量与互斥锁)
工程代码下载连接一、信号量的介绍 Edsger Dijkstra,并发编程领域的先锋人物,提出了一种经典的解决同步不同执行线程问题的方法,该方法就是基于一种你叫做信号量(semaphore)的特殊类型变量的。信号量s是具有非负数值的全局变量,只能由两种特殊的操作来处理,这两种操作称为P和V:(1)P(s): 如果s是非0的,那么P将s减1,并且立即返回。如果s为0,那么就挂起这个线...原创 2018-05-25 09:10:28 · 1306 阅读 · 1 评论 -
深入理解计算机系统-- 并发编程(1)
一、基本介绍1、如果逻辑控制流在时间上重叠,那么它们就是并发的。到目前为止,我们主要将并发看作是一种操作系统内核用来运行多个应用程序的机制。当然并发不仅仅局限于内核,应用级并发也属于并发。(1)访问慢速I/O设备。当一个应用正在等待来自慢速I/O设备(如磁盘)的数据到达时,内核会运行其他进程,使CPU保持繁忙。每个应用都可以按照类似的方式,通过交替执行I/O请求和其他有用视为工作来并发。...原创 2018-05-21 00:10:18 · 559 阅读 · 0 评论 -
深入理解计算机系统--网络编程
一、客户端-服务器编程模型每个网络应用都是基于客户端-服务器模型的。客户端-服务器模型中的操作是事物(transaction)。一个客户端-服务器事物由以下四步组成。1、当一个客户端需要服务时,它向服务器发送一个请求,发起一个事务。例如,当Web浏览器需要一个文件时,它就发送一个请求给Web服务器。2、服务器收到请求后,解释它,并以适当的方式操作它的资源。例如,当Web服务器收到浏览器...原创 2018-05-21 00:09:33 · 1319 阅读 · 0 评论 -
深入理解计算机系统之七--链接
一、简介1、链接(linking)是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行。链接可以执行于编译时(compile time),也就是在源代码被翻译成机器代码时;也可以执行于加载时(load time),也就是在程序被加载器(loader)加载到内存并执行时;甚至执行于运行时(run time),也就是由应用程序来执行。在早期的计算机系统中,链...原创 2018-05-21 00:05:23 · 617 阅读 · 0 评论 -
深入理解计算机系统之六--存储器层次结构
一、小结1、存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。CPU寄存器保存着最常用的数据。靠近CPU的小的、快速的高速缓存存储器作为一部分存储在相对慢速的主存储器中数据和指令的缓冲区域。主存缓存存储在容量较大的、慢速磁盘上的数据,而这些磁盘常常作为存储在通过网络连接的其他机器的磁盘或磁带上的数据的缓冲区域。2、作为程序员需要理解存储器层次结构,因为它对应用程序的性能有着...原创 2018-05-20 19:35:27 · 1157 阅读 · 0 评论 -
深入理解计算机系统之五--优化程序性能
一、介绍1、写程序的最主要目标就是使它在所有可能的情况下都正确工作。在很多情况下,让程序运行得快也是一个重要的考虑因素,比如程序实时处理视频帧或者网络包。2、编写高效程序需要做到以下几点:第一、必须选择一组适当的算法和数据结构。第二、必须编写出编译器能够有效优化以转换成高效可执行代码的源代码。对于这一点,需要理解优化编译器的能力和局限性是很重要的。第三、针对处理运算量特别大的计算...原创 2018-05-20 17:23:53 · 348 阅读 · 0 评论 -
深入理解计算机系统之四--处理器体系结构
一、小结1、处理器必须执行一系列指令,每条指令执行某个简单操作,例如两个数相加。指令被编码为由一个或多个字节序列组成的二进制格式。一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构(ISA)。ISA在编译器编写者和处理器设计人员之间提供了一个概念抽象层,编译器编写者只需要知道允许哪些指令,以及它们是如何编码的;而处理器设计者必须建造出执行这些指令的处理器。2、ISA提供了程序执行...原创 2018-05-20 17:06:00 · 320 阅读 · 0 评论 -
深入理解计算机系统之三--信息的表示和处理
一、程序的机器级表示1、机器级程序和它们的汇编代码表示,与C程序的差别很大。各种数据类型之间的差别很小。2、程序是以指令序列来表示的,每条指令都完成一个单位的操作。部分程序状态,如寄存器和运行时栈,对程序员来说时直接可见的。3、编译器必须使用多条指令来产生和操作各种数据结构,以及实现像条件、循环和过程这样的控制结构。 致谢1、《深入理解计算机系统》[第3版],作者 Rand...原创 2018-05-20 16:41:11 · 270 阅读 · 0 评论 -
深入理解计算机系统之二--信息的表示和处理
一、小结1、计算机将信息编码为位(比特),通常组织成字节序列。有不同的编码方式用来表示整数、实数和字符串。不同的计算机模型在编码数字和多字节数据中的字节顺序时使用不同的约定。2、大多数机器对整数使用补码编码,而对浮点数使用IEEE标准754编码。在位级上理解这些编码,并理解算术运算的数学特性,对于想使编写的程序能在全部数值范围上正确运算的程序员来说,是很重要的。3、在相同长度的无符...原创 2018-05-20 16:18:40 · 264 阅读 · 0 评论 -
深入理解计算机系统之一--计算机系统简介
一、系统的硬件系统(1)主存是一个临时存储设备(内存条),在处理器执行程序时,用来存放程序和程序处理的数据。 二、计算机中程序的表示、运行1、示例代码//#include <stdio.h>int main(){ printf("hello world!\n"); return 0;}//2、表示(1)大部分的现代计算机系统都是用ASC...原创 2018-05-20 10:51:02 · 414 阅读 · 0 评论