操作系统与组成原理
文章平均质量分 70
_萤火
这个作者很懒,什么都没留下…
展开
-
字符编码
ASCIIASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及特殊控制字符编号从0开始的32种状态分别规定了特殊的用途,这些0×20以下的字节状态称为控制码例如 0x10 表示换行,0x07b表示蜂鸣等1...原创 2020-01-02 17:53:36 · 274 阅读 · 0 评论 -
性能分析与优化
常见性能数值200 毫秒延迟,是多数在线用户可以忍受的最大延迟IOIO 读写延迟:一般是用 4KB 大小的 IO 做基准来测试如果一个随机 8KB 或 16KB 数据的对硬盘的读写,测量出的延迟不到 1 毫秒,那就实在是“太快”了;可以肯定它是命中某种缓存了IO 带宽:一般是针对比较大的 IO 而言;IOPS:就是每秒钟可以读写多少个小的随机 IO缓存操作系统...原创 2020-04-01 16:01:35 · 485 阅读 · 0 评论 -
HDD和SSD的比较
HDD当应用程序发出硬盘 IO 请求后,这个请求就会进入硬盘的 IO 队列。如果前面有其他 IO,那么这个请求可能需要排队等待HDD对于随机访问和顺序访问速度差距很大主要因素是寻道时间使用 HDD 的应用程序通常会进行各种优化,以执行不需要寻址的就地更新,比如**只在文件的后面append*为什么使用HDD时编译性能比使用SSD差很多?因为编译的时候,会有很多的小文件读入内存用来编译,也会生成大量的tmp文件,还有最终的target文件等等这些都比较消耗IO使用原创 2020-04-26 17:15:05 · 2829 阅读 · 0 评论 -
CMU CSAPP笔记 第一、二章
Introduction(csapp-1)C语言程序编译的四个阶段预处理 根据 # 开头的命令修改文件,例如将头文件中的内容直接插入原程序文本中生成 .i 文件编译 编译成汇编语言生成 .s 文件汇编 编译成机器语言生成 .o 文件(二进制)链接 链接调用的内置函数, 例如 printf.o 生成可执行文件cache高速缓存较大的储存设备比较小的要慢很多.........原创 2018-05-20 19:36:41 · 1146 阅读 · 0 评论 -
CMU CSAPP笔记 第三章
# bits,bytes and integers byte = 8 bitsshift opeartion<< : 向右移动,低位补零&am原创 2018-03-08 09:32:18 · 1511 阅读 · 0 评论 -
CMU CSAPP笔记 第五章
Program OptimizationGCC优化级别 -Og最低优化-O1,-O2,-O3优化程度依次递增优化可能会增加程序的大小,也可能使得程序更难调试常用优化手段code motion 将不变量移到循环外,避免重复计算 redution in strength 将开销大的操作用开销小的代替 乘法用位移或者加法代替 尽量用寄存器操作代替读取和写入内存 ...原创 2018-06-14 00:33:51 · 481 阅读 · 0 评论 -
CMU CSAPP笔记 第六章
memory hierarchy(csapp-6.1,6.2,6.3)机械硬盘的构造 总线 局部性原理(locality) 通过局部性原理可以设计高速缓存时间局部性(Temporal Locality): 如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。程序循环、堆栈等是产生时间局部性的原因。空间局部性(Spatial Locality): 在最近的将来将...原创 2018-06-17 14:09:40 · 561 阅读 · 0 评论 -
CMU CSAPP笔记 第七章
Linking (csapp-7)编译驱动程序包括 预处理器(cpp) 将程序从ASCII源文件翻译成 .i 文件编译器(ccl) 翻译成 .s ASCII汇编语言文件汇编器(as) 翻译成 .o 可重定位目标文件链接器(ld) 翻译成可执行文件链接器主要任务 符号解析 将函数,全局变量,静态变量(static)的定义和引用(使用)关联起来重定位 汇编器生成从地址0...原创 2018-06-23 01:03:02 · 1096 阅读 · 0 评论 -
CMU CSAPP笔记 第八章
Exception(CSAPP-8.1)在第三章中,我们已经知道程序执行中的两个控制流 —— 跳转和调用,但是这只是对于一个程序内部的控制,如果系统本身发生变化或者程序需要和系统交互,就需要新的控制方式系统交互举例: 从硬盘读取数据用户按下Ctrl+c 终止程序产生除0错误新的方式——异常控制流 用户代码通系统内核提供的接口将异常号传递给内核,内核通过内置的异常表决定采取的行动......原创 2018-06-24 14:57:43 · 581 阅读 · 2 评论 -
CMU CSAPP笔记 第九章
物理地址和虚拟地址Caching虚拟内存实际上是储存在磁盘上的数组,虚拟地址为数组的索引使用第六章cache的方法,将较底层的磁盘上的数据分割为一个个块(被称为虚拟页VP),而内存则作为他们的cache 物理内存(内存)同样地被分割为物理页,每个物理页与虚拟页大小相同,因此可以储存任意虚拟页虚拟页的集合被分为三个类别 未创建页的(有效位为0,且不占用空间)未分配的,指虚拟内...原创 2018-07-22 10:42:29 · 559 阅读 · 0 评论 -
CMU CSAPP笔记 第十章
系统级I/O(csapp)在Linux系统中,所有I/O设备都是文件 shell在每个进程的开始都打开三个文件 标准输入,标准输出和标准错误带缓冲和不带缓冲的函数不可交叉使用元数据 记录文件的相关数据目录 每个目录项都是一个结构共享文件 标识符表 每个进程都有一个标识符表每个表项都指向文件表中的一个表项文件表 所有进程共享一个文件表每个表项由文件位置,引用计数和指...原创 2018-06-27 04:00:44 · 390 阅读 · 0 评论 -
CMU CSAPP笔记 第十一章
基本网络知识网络系统层次LAN(局域网) Ethernet(以太网)WAN(广域网) 数据的传输过程 TCP/IP协议IP 基本的命名方法和递送机制IPv4和IPv6 最初的互联网协议使用32位地址,称位IPv4,而IPv6有128位地址IP地址通常以一种点分十进制来表示 128.2.194.242就是地址0x8002c2f2UDP 不可靠数据...原创 2018-08-21 19:13:00 · 575 阅读 · 0 评论 -
CMU CSAPP笔记 第十二章
并发的基本知识并发的应用 访问慢速I/O设备与人交互(键盘输入等)通过推迟部分工作(例如free动态内存)来降低延迟网络服务器同时服务多个客户端并发的经典问题 竞争死锁 A需要B执行才能执行,同时B需要A执行才能执行活锁 外部事件或者系统操作一直在子进程之前执行,导致要执行的子进程迟迟不能执行(类似于一直有人插队)构造并发程序的基本方法基于进程 内核自动管理...原创 2018-08-23 17:42:44 · 499 阅读 · 0 评论 -
《现代操作系统》阅读笔记——操作系统梗概
操作系统的主要功能隐藏复杂的底层硬件操作,为用户程序提供抽象管理计算机资源超线程对于一般的CPU, 虽然有多线程的概念,但是实际上CPU中每一时刻还是只有一个线程在执行的我们知道现代CPU是流水线执行的,并且每个流水线阶段有多个执行单元,比如专门执行浮点运算的,因此在不同任务重很有可能有些执行单元会不在工作。而超线程技术就是让闲着的那些执行单元去做另一个线程的工作。这样就实...原创 2018-11-11 14:15:47 · 884 阅读 · 0 评论 -
《现代操作系统》阅读笔记——进程和线程
进程和程序的区别程序只是一连串待执行的指令进程包括程序,输入输出和和当前的状态(寄存器里的值,PC值,打开的文件等)导致进程被创建的事件系统初始化正在运行的程序调用了fork一个用户请求创建一个新进程一个批处理程序的初始化守护进程是在后台运行不受终端控制,无需用户输出的进程 , 周期性地执行某种任务或等待处理某些发生的事件一般在操作系统启动时创建如网络服务进程...原创 2018-11-11 15:38:48 · 180 阅读 · 0 评论 -
《现代操作系统》阅读笔记——内存管理
地址重定位最开始没有重定位,程序直接使用物理地址任然被微波炉,洗衣机等嵌入式设备使用缺点是一次只能执行一个程序,否则会程序地址起始位置会变动静态重定位为了解决只能运行一个程序的问题,提出了静态重定位的方法,在每次程序载入内存时,在为每个地址加上程序起始地址不可被多个程序共享,因为每个程序的其实地址不同,计算出来的绝对地址也不同动态重定位不再是程序载入内存时重定向,...原创 2018-11-15 12:53:07 · 270 阅读 · 1 评论 -
《现代操作系统》阅读笔记——文件系统
文件系统的使用文件的命名对于Unix系统 ,文件的拓展名只是一种约定,并不给操作系统传递什么信息在Unix中,拓展名甚至可以有多个,如 homepage.hitml.zip 表示一个被压缩过的HTML格式的网页文件对于Windows系统,文件拓展名是有实际意义的,用户可以在操作系统中注册拓展名,并规定那个程序打开这个拓展名文件类型普通文件ASCII 文件可以显示,...原创 2018-11-24 17:32:41 · 1005 阅读 · 1 评论 -
《现代操作系统》阅读笔记——输入输出
I/O硬件原理I/O设备块设备以块为单位传递信息所有块都可以独立于其他块读写字符设备以字符为单位传递数据不可寻址内存映射I/O每个设备都有一个设备控制器,每个控制器都有几个寄存器与CPU通信通过读取和写入这些寄存器,操作系统可以控制和感知设备状态控制寄存器被映射到内存空间,并且确保该内存地址不会和虚拟内存重叠优点可以直接使用C等高级语言编写I/...原创 2018-11-25 20:00:50 · 208 阅读 · 0 评论 -
《现代操作系统》阅读笔记——竞争与加锁
竞争发生在当多线程同时访问同一个内存,各个线程执行的顺序有交叉时。一般来说,局部变量和参数由于对每个线程是独立的,不会发生竞争。竞争通常发生在全局变量,堆变量等上。解决竞争最简单的方法就是进入临界区(开始读写公共内存)时屏蔽掉中断,但是这种方法对于多CPU无效,因为该内存可能会被别的CPU中的程序访问。现在更好的方法是屏蔽那片内存的访问(以前是通过锁住总线解决的)。但是还是会有问题,因为这样...原创 2018-11-04 22:31:55 · 1651 阅读 · 0 评论 -
《现代操作系统》阅读笔记——调度和死锁
调度是操作系统的最底层何时需要调度创建新的进程时运行父进程还是子进程进程退出时进程阻塞时I/O中断结束后调度算法目标给所有进程公平的CPU份额能够保证按照规定的策略执行比如某些安全控制进程必须能够得到执行保持系统的每个部分都忙碌两种调度方式抢占式一个进程最多运行n ms, 如果还没运行结束,就会被始终中断,调用别的程序非抢占......原创 2018-11-13 00:18:07 · 128 阅读 · 0 评论 -
《现代操作系统》阅读笔记——多处理机系统
多处理机三种模型共享储存器多处理机消息传递多计算机广域分布式系统多处理机的构造高速缓存一致性协议为了缓解多个DUP对总线的争夺,为每个CPU添加了高速缓存如果CPU试图在一个或多个远程高速缓存中写入一个字,总线硬件检测到写,并把一个信号放到总线上通知所有其它的高速缓存。如果其他高速缓存有个"干净"的副本,也就是同存储器内容完全一样的副本,那么它们就可以丢弃该副本并让写......原创 2018-11-26 21:54:57 · 264 阅读 · 0 评论 -
《计算机组成与设计》阅读笔记——虚拟存储器
虚拟存储器(VM)主存也可以成为磁盘的cache,这项技术叫做虚拟存储器每个程序有自己独立的内存空间主存只要存放程序中活跃的那一部分即可,这也是局部性原理VM和cache的原理是一样的,不过VM中块被叫做页采用全相联的方式组织降低了缺失率可以使用复杂的替换机制优化由于使用了页表,不需要进行查找和直接映射组织法很像,主要区别是多了一个额外的页表,同时可以在任意位置替换,而不是...原创 2018-12-11 12:01:39 · 403 阅读 · 0 评论 -
《计算机组成与设计》阅读笔记——流水线CPU的设计
单周期CPU单周期构造的缺陷由于要保证所有指令在一个周期内完成,时钟周期会很长,也限制了时钟频率的提升各种指令执行的长短时间不一(比如加法和存数据到内存)时间短的指令效率被浪费指令类型指令分为R-type,I-type和J-type一般由最高6位区分R-type指令主要执行ALU运算,具体运算由最低6位的funct段决定I-type指令主要是和地址与常数相关的指令,如存...原创 2018-12-12 20:26:05 · 2187 阅读 · 0 评论 -
《计算机组成与设计》阅读笔记——I/O与并行
I\O总线(BUS)同一组连线被多个通信路径共享并行组织优点功能多而成本低新的设备很容易被添加进来缺点可能会产生通信瓶颈,从而限制了I/O设备的最大吞吐量因为所有数据传输都要通过总线,而总线的带宽(单位时间传输的数据量)是有限的总线分为北桥(连接处理器和内存)和南桥(连接I/O设备和内存)南桥通过北桥和处理器以及内存相联,并将北桥和I/O设备相联...原创 2018-12-11 20:53:50 · 373 阅读 · 0 评论 -
《计算机组成与设计》阅读笔记——cache
局部性原理时间局部性如果一个数据项被访问,那么不久后它可能再次被访问循环空间局部性如果一个数据项被访问,那么与他地址相邻的数据项也很有可能被访问数组局部性原理是cache产生的基础cache地址组成索引位n位索引表示cache有 2n2^n2n个块块大小位m位表示有2m2^m2m字额外的两位用来表示byte偏移标记位假设地址为3...原创 2018-12-11 11:58:34 · 846 阅读 · 0 评论 -
理解Peterson算法
先上算法代码:int turn;int interested[2];void enter_region(int process)//在进入临界区前调用{ int other = 1 - process; interested[process] = true; turn = process; while ( turn == process && interested...原创 2018-11-04 01:04:21 · 6525 阅读 · 1 评论 -
dup和dup2函数的小理解
int dup(int fd); int dup2(int fd, int fd 2);dup的参数是一个文件描述符,指向一个文件(stdin,stdout等也是特殊的文件)。返回的也是一个文件描述符(当前还未被使用的最小的描述符编号),这个描述符和fd指向同一个文件。也就是说,当你当你用write向返回的文件描述符写入时,也相当于向fd指向的文件写入。dup2多了一个参数,这个参数让...原创 2018-11-03 20:38:32 · 287 阅读 · 0 评论