一.UNIX I/O     在UNIX系统中有一个说法,一切皆文件.所有的I/O设备,如网络.磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行.这种将设备映射为文件的方式,允许UNIX内核引出一个简单.低级的应用接口,称为UNIX I/O,这使得所有的输入和输出都能以一种统一且一致的方式来执行. 打开文件 打开文件操作完成以后才能对文件进行一些列的操作,打开完成过以后会返回一个文件描述符,它在后续对此文件的所有操作中标识这个文件,内核记录有关这个打开文件的所有信息. 改…
一.UNIX I/O     在UNIX系统中有一个说法,一切皆文件.所有的I/O设备,如网络.磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行.这种将设备映射为文件的方式,允许UNIX内核引出一个简单.低级的应用接口,称为UNIX I/O,这使得所有的输入和输出都能以一种统一且一致的方式来执行. 打开文件 打开文件操作完成以后才能对文件进行一些列的操作,打开完成过以后会返回一个文件描述符,它在后续对此文件的所有操作中标识这个文件,内核记录有关这个打开文件的所有信息. 改…
系统级I/O 输入/输出 是在主存和外部设备之间拷贝数据的过程. 外部设备可以是:磁盘驱动器.终端和网络. 输入和输出都是相对于主存而言的. 输入是从I/O设备拷贝数据到主存.输出时从主存拷贝数据到I/O设备. 所有语言运行时系统都提供执行I/O的较高级别的工具. 如ANSI C提供标准I/O库,包含像printf和scanf这样执行带缓冲区的I/O函数: C++语言用它的重载运算符提供了类似的功能: 在Unix系统中,是通过使用由内核提供的Unix I/O函数来实现这些较高级别I/O函数的.…
<深入理解计算机系统V2>学习指导 目录 图书简况 学习指导 第一章 计算机系统漫游 第二章 信息的表示和处理 第三章 程序的机器级表示 第四章 处理器体系结构 第五章 优化程序性能 第六章 存储器层次结构 第七章 链接 第八章 异常控制流 第九章 虚拟存储器 第十章 系统级I/O 第十一章 网络编程 第十二章 并发编程 图书简况 「深入理解计算机系统(Computer Systems: A Programmer's Perspective)阅读体会」和「老赵书托(3):深入理解计算机系统」这…
重要知识点 输入/输出(I/O) I/O是主存和外部设备(如磁盘驱动器.终端和网络)之间拷贝数据的过程. 输入操作是从I/O设备拷贝数据到主存. 输出操作是从主存拷贝到I/O设备. Unix I/O 在unix中所有的I/O设备都被模型化为文件,这使得所有的输入输出都能以一种统一的方式进行. 打开文件:一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个I/O设备.内核返回一个小的非负整数,叫做描述符,它在后续对此文件的所有操作中标识这个文件. Unix外壳创建的每个进程开始时都有三个打…
第十章 系统级I/O 输入输出I/O是在主存和外部设备(如磁盘,网络和终端)之间拷贝数据的过程.输入就是从I/O设备拷贝数据到主存,而输出就是从主存拷贝数据到I/O设备. 所有语言的运行时系统都提供执行I/O的较高级别的工具. 学习Unix I/O原因:1.了解Unix I/O将帮助你理解其他的系统概念.2.有时你除了使用Unix I/O外别无选择. 10.1unix i/o 一个Unix文件就是一个m个字节的序列.所有的I/O设备,如网络.磁盘和终端,都被模型化为文件,而所有的输入和输出都被当…
<深入理解计算机系统>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382303 内容提要 本书主要介绍了计算机系统的基本概念,包括最 底层的内存中的数据表示.流水线指令的构成.虚拟存储器.编译系统.动态加载库,以及用户应用等.书中提供了大量实际操作,可以帮助读者更好地理解程序执行的方式,改进程序的执行效率.此书以程序员的视角全面讲解了计算机系统,深入浅出地介绍了处理器.编译器.操作系统和网络环境,是这一领域的权威之作. 本书适合作为计…
第1章 计算机系统漫游 (已看) 1.1 信息就是位+上下文 1.2 程序被其他程序翻译成不同的格式 1.3 了解编译系统如何工作是大有益处的 1.4 处理器读并解释存储在内存中的指令 1.4.1 系统的硬件组成 1.4.2 运行hello程序 1.5 高速缓存至关重要 1.6 存储设备形成层次结构 1.7 操作系统管理硬件 1.7.1 进程 1.7.2 线程 1.7.3 虚拟内存 1.7.4 文件 1.8 系统之间利用网络通信 1.9 重要主题 1.9.1 Amdahl定律 1.9.2 并发和…
本章通过跟踪hello程序的生命周期来开始对计算机系统进行学习.一个源程序从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止.我们将沿着这个程序的生命周期,简要地介绍一些逐步出现的关键概念.专业术语和组成部分. @ 目录 源程序是如何存储的 源程序到可执行文件的过程 shell是什么 典型系统的硬件组成 运行hello程序 高速缓存 存储设备的层次结构 操作系统管理硬件 进程&线程 虚拟内存 并发&并行 多核处理器&多线程   好久没有更新博客了,从国庆节到现在一直在整…
简介 本笔记目前已包含 CSAPP 中除第四章(处理器部分)外的其他各章节,但部分章节的笔记尚未整理完全.未整理完成的部分包括:ch3.ch11.ch12 的后面几小节:ch5 的大部分. 我在整理笔记时所考虑的是:在笔记记完后,当我需要查找某个知识点时,不需要到书中去找,只需查看笔记即可找到相关知识点.因此在整理笔记时力求全面与简洁,能够在查找时快速找到并迅速理解. 在此基础上,笔记已整理的内容是对书中内容的提炼,包括了我在学习时所认为的书中所有有用的知识点,因此每章的笔记内容都比较多. 注:…
测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化.性能剖析的目标是寻找性能瓶颈,查找引发性能问题的原因及热点代码.代码优化的目标是针对具体性能问题而优化代码或编译选项,以改善软件性能. 在性能剖析阶段,需要借助于现有的profiling工具,如perf等.在代码优化阶段往往需要借助开发者的经验,编写简洁高效的代码,甚至在汇…
引言 各位猿友们好,计算机系统系列很久没更新了,实在是抱歉之极.新的一年,为了给计算机系统系列添加一些新的元素,LZ将其更改为书的原名<深入理解计算机系统>.这本书非常厚,而且难度较高,LZ看了很久才看了四章.当然,这跟LZ最近很久没翻书有关系,最近公司的事情比较多,可让LZ愁了个愁,尤其是招人的事一直不太顺利,很多工作无法展开,也让LZ的心中一直压着一块大石. 不过事情多了,就意味着责任大了,因此LZ最近经常回家自己研究公司所用的框架,以期了如指掌,可以应付各种随即事件.这耽误了LZ不少功夫…
在写本章的内容之前,LZ先做个小广告.其实也不算是什么广告,就是LZ为了和各位猿友交流方便,另外也确实有个别猿友留言或者在博客里发短消息给LZ要联系方式.因此LZ斗胆建立了一个有关<深入理解计算机系统>这本书的交流群,当然了,如果有哪位猿友有其它方面的问题,也可以在群里提出,如果LZ有能力帮忙的话会尽量帮助各位,倘若LZ能力不足,或许也会有其它猿友可以解答. 群号在文章里就不贴了,有兴趣的猿友可以看右侧公告栏,欢迎各位大神.大牛.小牛.菜鸟踊跃加入. hello world的执行 我们以lin…
代码分析 cp1.c 功能:复制文件. #include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#define BUFFERSIZE 4096#define COPYMODE 0644 //文件权限位 void oops(char *, char *);int main(int argc, char *argv[]){ int in_fd, out_fd, n_cha…
<深入理解计算机系统>Chapter 7 读书笔记 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(货被拷贝)到存储器并执行. 链接的时机 编译时,也就是在源代码被翻译成机器代码时 加载时,也就是在程序被加载器加载到存储器并执行时 运行时,由应用程序执行 链接器使分离编译称为可能. 一.编译器驱动程序 大部分编译系统提供编译驱动程序:代表用户在需要时调用语言预处理器.编译器.汇编器和链接器. 1.将示例程序从ASCⅡ码源文件翻译成可执行目标文件的步骤 ()运行…
●第一章 C是系统级编程的首选.C++显示支持抽象,属于应用级程序设计语言. 简单例子: 一个典型系统的硬件组成: 存储器的层次结构: 注:存储器层次结构的设计思想是,该层存储器作为下一层存储器的高速缓存 总结:计算机系统的一个重大主题就是提供不同层次的抽象表示,来隐藏实际实现的复杂性.  操作系统内核是应用程序和硬件之间的媒介.提供3个基本的抽象: (1)文件是对I/O设备的抽象 (2)虚拟存储器是对主存和磁盘的抽象 (3)进程是对处理器,I/O设备和主存的抽象. 虚拟机是对整个计算机(操作系…
以前为了做compiler,研读+实现了几乎所有种类的语言.现在看语法手册几乎很快就可以理解整个语言的内容.后来我对比了一下go和rust,发现go的类型系统简直就是拼凑的.这会导致跟C语言一样,需要高超的技巧才能写大程序.而rust则没有这种问题,每个部分的组成都很和谐.---------------------------------------------------------------------- Rust是挺优秀的,函数式本来就比命令式来的优雅.但同时也要看到,两种语言的定位不同…
上个星期最终把csapp看完了. 我买的是中文版的,由于除了貌似评价不错以外,由于涉及到些自己不了解的底层东西,怕是看英文会云里雾里.如今看来,大概不能算是个长处,可是的确可以加快我的看书速度,否则一星期还真不大可能把这书搞定. 对csapp慕名已久,主要在于据说这本书尽量的做到相对实用,不去讲那些和实际编程没多大关系的计算机原理(毕竟是著名计算机院校里面最偏软件的cmu的作品),重点很得当,像我这样的没有本科科班出生又不想去死读些不知道以后有没实用的东西的人来说,最是适合了.感兴趣的东西就行再…
9月到10月8号,包括国庆七天,大概每天5小时以上的时间,把Computer System: A Programmer Perspective 2rd version(深入理解计算机系统)的英文版啃完,收获很大. 第一部分 主要内容     我印象比较深的内容有: 计算机如何表示数,无符号数,有符号的表示,以及C语言中有符号与无符号之间运算要注意的问题,比如x>y 与x -y > 0 并不是任何时候都可以互换. IA3汇编语言(书里会将一些要理解的东西放在穿插在正文里面的习题里,在我看来,习题…
第十章 系统级I/O 输入/输出(I/O) : 是指主存和外部设备(如磁盘,终端,网络)之间拷贝数据过程. 高级别I/O函数 scanf和printf <<和>> 使用系统级I/O函数实现 系统级I/O函数. Q:大多数时候高级别I/O函数都运行良好,为什么我们还要学Unix I/O A: 了解Unix I/O将帮助你理解其他的系统概念. 要深入理解其他概念,必须理解I/O. 有时你除了使用Unix I/O别无选择 标准I/O库没有提供读取文件元数据的方式. 如文件大小或文件创建时…
上一篇序章我谈了谈 程序员为啥要懂底层计算机结构 ,有人赞同也有人反对,但是这并不影响 LZ 对深入理解计算机系统研究的热情.这篇博客以案例驱动的模式,通过跟踪一个简单 Hello World 程序的生命周期开始系统的学习,包括它被程序员创建,到在系统上运行,输出简单的消息,然后终止.LZ 将沿着这个程序的声明周期,先简要的介绍一些逐步出现的关键概念.专业术语以及组成部分.后面将会详细展开. 1.计算机系统 我们知道计算机系统是由硬件和软件组成的.它们共同工作来运行应用程序.虽然系统的实现方式随…
8.9 关于并行的定义我之前写过一篇文章,参考: 并发与并行的区别 The differences between Concurrency and Parallel +----------------------------+ | Process pair Concurrent?| +----------------------------+ | AB N | | | | AC Y | | | | AD Y | | | | BC Y | | | | BD Y | | | | CD Y | +--…
测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化.性能剖析的目标是寻找性能瓶颈,查找引发性能问题的原因及热点代码.代码优化的目标是针对具体性能问题而优化代码或编译选项,以改善软件性能. 在性能剖析阶段,需要借助于现有的profiling工具,如perf等.在代码优化阶段往往需要借助开发者的经验,编写简洁高效的代码,甚至在汇…
1.前言 ARMV8系统级编程模型主要包括异常级别.运行状态.安全状态.同步异常.异步异常.DEBUG 本文主要对系统级编程模型做一个概要介绍 2. 异常级别 2.1 Exception level概述 ELx(x<4),x越大等级越高,执行特权越高 执行在EL0称为非特权执行 EL2 没有Secure state,只有Non-secure state EL3 只有Secure state,支持EL0/EL1的Secure 和Non-secure之间的切换 EL0 & EL1 必须要实现,E…
第七章 链接 --<深入理解计算机系统> 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行. 一.编译器 大多数编译系统提供编译驱动程序,它代表用户在需要时调用语言预处理器.编译器.汇编器和链接器. 链接可以执行于编译时,也就是在源代码被翻译成机器代码时:也可以执行于加载时,也就是在程序被加载器加载到存储器并执行时:甚至执行于运行时,由应用程序来执行. 二.静态链接器 像Unix ld程序这样的静态链接器以一组可重定位目标文件和命令行参数…
博客中的文章均为meelo原创,请务必以链接形式注明本文地址 Shell Lab是CMU计算机系统入门课程的一个实验.在这个实验里你需要实现一个shell,shell是用户与计算机的交互界面.普通意义上的shell就是可以接受用户输入命令的程序.它之所以被称作shell是因为它隐藏了操作系统低层的细节.完成Shell Lab你会对shell有更加深入的认识,并熟悉Linux的多进程编程方法. 编程实现是一种绝佳的学习方式,然而就像这个实验一样,很多很好的课程作业都隐藏在互联网当中.大多数人难以通…
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版.而知识的传播不应该由于纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. 第8章  深入理解Surface系统 本章主要内容 ·  具体分析一个Activity的显示过程. ·  具体分析Surface. ·  具体分析SurfaceFlinger. 本章涉及的源代码文件名称及位置: · ActivityThread.java framework/base/core/java/an…
在之前的一篇文章中,我们讲过了QSemaphore类,其可以用于同步多线程.而今天要讲到的这个类,根据名字就可以猜测到,其可以在整个系统中使用,即它既可以用于多线程,也可以用于多线程.当然,这也意味着,QSystemSemaphore类是一个比较重量级的类,所以,除非在同步多进程的情况下,否则不应该使用该类.其他方面,该类和QSemaphore均相同,操作也相同. 我们先来看一下该类的构造函数: QSystemSemaphore::QSystemSemaphore(const QString &…
该书中第11章是写web服务器的搭建,无奈对web还比较陌生.还没有搞明白. 这些所谓的并发,其实都是操作系统做的事情,比如,多进程是操作系统fork函数实现的.I/O多路复用需要内核挂起进程.多线程需要内核创建和挂起线程.我么只是使用以下操作系统的这项并发技术.但是我们必须处理一些存在问题. ●进程.用这种方法,每个逻辑控制流都是一个进程,由内核来调度和维护.因为进程有独立的虚拟地址空间,想要和其他流通信,控制流必须使用进程间通信(IPC). ●I/O多路复用.这种形式的并发,应用程序在一个进…
众所周知,各个手机厂商由于对Android 原生系统定制的原因,会造成系统级应用packname 和activityname 不同的现象,就拿时钟软件来说,魅族2的activityname 是[com.android.alarmclock.AlarmClock],而HTC One 的则是[com.htc.android.worldclock.WorldClockTabControl],所以就要使用隐式的Intent 来打开所需的软件(如时钟). 下面将介绍不是特别常用的三个应用的Intent 打…