system&software engineer
文章平均质量分 70
孤鸿子_
just for fun/前ACMer/前MSRAer/ZJUer/编程爱好者/学生/
展开
-
操作系统笔记:(七)CPU 调度
本节讲CPU调度,分为如下三个部分:基本概念调度准则调度算法基本概念进程执行总是有CPU执行和I/O 等待周期组成的,也就是有下面的这个图回忆在第5节笔记中讲的进程的三状态模型, CPU调度决策可在如下的决策中发生:运行切到等待(e.g.: I/o请求 )进程终止 运行到就绪(e.g.: 中断,抢占,时间片到期)等待到就绪 (e.g.: I/O 完成)前两种没有选择只能调度, 不过原创 2018-04-09 19:36:22 · 509 阅读 · 0 评论 -
[OS] 分段和分页存储管理的比较
分段分页分段分段存储管理引入主要是为了方便 用户(程序员)编程的需要分段对程序猿是可见的,即编程的时候断的大小完全是在写程序的时候决定的,段起始地址可以从任意地址开始(e.g.:代码段数据段,堆栈段.)分段存储方式下,源程序中的(段号,段内偏移)经过链接编译后仍然保持二维地址结构分页从固定分区到动态分区,从分区到分页都是为了提高内存使用效率。分页对用户是不...原创 2018-06-26 16:09:24 · 672 阅读 · 0 评论 -
《understanding the linux kernel》笔记: 1. linux开机发生了什么?
remark: 本笔记来自《understanding the linux kernel》一书,所参考内核是linux 2.6,由于笔者能力有限,对其中内容不负任何责任。the BIOSbootloadersetupthe startup_32( )the start_kernel书中这部分附在全书附录中,题目非常的 romantic 分了5个阶段:A.1....原创 2018-09-09 11:28:53 · 797 阅读 · 0 评论 -
《understanding the linux kernel》笔记: 2. Memory Addressing(内存地址)
remark:《understanding the linux kernel》笔记第二篇,对应原书第二章。x86 内存地址MMU (the Memory Management Unit) 内存管理单元Segmentation in Hardware 硬件分段机制segmentation descriptor 段描述符Fast Access to Segment Descript...原创 2018-09-09 15:44:51 · 404 阅读 · 0 评论 -
File System, Kernel Data Structures, and Open Files(文件系统,内核数据结构,与打开文件)
写在前面本文来自 USNA(美国海军学院)系统编程课的讲义,现将其翻译在此,由于没有版权所以 谢绝任何转载,如果你能拿到版权,当我没说本人英文水平较弱,有错误请大家帮忙指出关于内核结构,我没有看过最近的 Linux 系统内核,所以是否真如文章说的那样,有待验证, 不过测试程序是可以用文中内核结构解释的译者: fighter(tt)回顾: 什么是文件系统回忆一下,文件系统是一种放...翻译 2018-10-21 11:46:34 · 512 阅读 · 0 评论 -
[APUE ch3 note] file IO
author : fighter(zzt)edit date: 10/18/2018License: 转载请注明出处原创 2018-10-21 22:34:40 · 273 阅读 · 0 评论 -
MIT 6.824 lab1: mapreduce 学习总结
这是 MIT 6.824 课程 lab1 的学习总结,记录我在学习过程中的收获和踩的坑。我的实验环境是 windows 10,所以对lab的code 做了一些环境上的修改,如果你仅仅对code 感兴趣,请移步 : github/zouzhitaomapreduce overview先大致看一下 mapreduce 到底是什么我个人的简单理解是这样的: mapreduce 就是一种分...原创 2019-04-06 14:55:05 · 1452 阅读 · 4 评论 -
MIT6.031学习笔记:(一)code review
写在前面:这门课程有点像国内的软件工程课程,而国内的软件工程课程,一般是讲一些软件工程的哲学…这门课程是将软件工程的哲学放在 reading 中而项目作业分开。个人认为软件工程哲学就是一种认同 ,即信则有,不信则无。更多的其实可以在今后工程项目中验证。所以我的笔记其实就是我所认可的软件工程哲学goal这门课所有的软件工程哲学都围绕着3个目标:safe from bugseasy t...原创 2018-10-30 08:57:18 · 998 阅读 · 0 评论 -
MIT6.031Software Construction学习笔记:(二)Specification
首先,什么是 Specification? Specification,就是我们平时看到的API文档的说明,比如java BigIntegerwhy SpecificationSpecification 其实是作为用户(调用这个API的人)和实现者(实现API的人)的一条分界线。Specification structureA specification of a method cons...原创 2018-11-06 10:49:05 · 714 阅读 · 0 评论 -
MIT 6.031 Software Construction 学习笔记:(三) Mutability & Immutability
这节主要是讲 可变对象给编程带来的危害,所谓不可变对象,就是整个生命周期中不可变的对象(废话), e.g. : String具体来说参见 Basic Java when we discussed snapshot diagramsRisks of mutationrisk1:passing mutable values看以下两段代码:/** @return the sum of the ...原创 2018-11-10 15:00:31 · 907 阅读 · 0 评论 -
MIT 6.031 Software Construction 学习笔记:(四) Avoiding Debugging
这章Reading 9: Avoiding Debugging给了我很大的收获,以前一些 ACMer 的不好的代码习惯(当然是为了快速coding)都在这里暴露无遗First Defense: Make Bugs Impossible主要是前面讲的一些内容的结合,一方面是编译器做足工作,另外一方面则是人要做足工作static checkingdynamic checking 这里主要是编...原创 2018-11-10 16:51:30 · 790 阅读 · 0 评论 -
进制转换原理
大家都知道10进制整数转是 “乘基取整”,10进制小数转2进制是“除基取余”。可是中间的原理又是什么呢?应为任意进制都可以转化为10进制,10进制也可以转化为任意进制,因此这里简要以 10进制与 RR 进制之间的转化为例介绍一下进制转化原理。10进制整数转 RR进制设 (v)R=(knkn−1…k1k0)R=(x)10(v)_R = (k_nk_{n-1}\dots k_1k_0)_R = (x)_原创 2018-03-14 16:03:08 · 1993 阅读 · 1 评论 -
补码与负数转换取反加一原理
准备考研之际突然怀疑起了以前认为理所当然的事情……这里简要总结,补码与负数转换之间 “取反加1”的原理我们知道补码其实是用一个像钟表那样的数轴来标数,比如:末位为符号位。设我们要转化的数是 −x−x-x, 则 xxx 其实表示的是−x−x-x 在数轴上到原点的距离。又设 −x−x-x 的补码表示是 vvv,则有(v+x)%2n=0(n为补码数宽度)(v+x)%2n=0(n为补码...原创 2018-03-14 16:21:51 · 3429 阅读 · 0 评论 -
[OS] 地址重定位
静态重定位动态地址重定位reference在操作系统中我们知道地址生成主要有以下3个阶段: 编译期: 对于各个目标模块儿生成一张符号表记录各个符号名及在本模块中的相对地址链接期: 对于各个模块解析内部和外部符号表,生成可重定程序,及将其中涉及地址引用的地方转换为数值地址,存放于磁盘中,可在装入主存或执行时重定位,生成物理地址(实际的主存中的地址),由于他在内存中的地...原创 2018-06-26 15:15:10 · 790 阅读 · 0 评论 -
中断、异常、和系统调用的区别总结
中断、异常、和系统调用在OS和计算机组成原理中都经常被提到,很难区分,并且不同版本的教材往往有不同的说法。这里主要采用《CSAPP》中的说法区分一下中断、异常、和系统调用。主要内容如下:术语说明异常流异常流的处理异常与过程调用的区别异常流的分类中断陷阱故障终止Linux/x86-64 中的异常总结术语说明逻辑控制流: 指的是程序从开始第一条...原创 2018-06-14 21:34:09 · 12773 阅读 · 0 评论 -
操作系统笔记:(0)学堂在线Thu 操作系统笔记目录
这是个人在准备考研期间看Thu 的OS MOOC 所做的笔记,不过由于个人非科班出生,所识有限,望各位来往路人多多指正。写这些文章主要为了给自己留个备份。Thu 学堂在线MOOC目录操作系统笔记:(一)物理内存分配1:连续内存分配 操作系统笔记:(二)物理内存分配2:非连续内存分配 操作系统笔记:(三)虚拟内存分配原创 2018-04-02 16:20:14 · 1388 阅读 · 1 评论 -
操作系统笔记:(五)进程
本文主要讲解进程的组成,PCB,及状态模型本文安排结构如下:进程的基本概念: 主要讲进程的是什么,特点,及与程序的区别进程控制块(Process Control Block, PCB)进程的状态模型进程的基本概念非正式的说法就是进程就是执行中的程序, 活动实体。进程的组成包含程序执行时的所有状态信息:codedata状态寄存器(e.g.: CR0,IP)通用寄存器进程占用的系统资源原创 2018-04-04 14:49:13 · 447 阅读 · 0 评论 -
操作系统笔记:(三)虚拟内存分配
本文介绍虚拟存储(虚拟存储分虚拟页式和段式,本文主要将页式,下面如不特别说明均指页式)的需求背景,概念,原理及缺页异常的处理流程 主要分为以下三部分:需求背景虚拟存储的原理特征缺页异常的处理流程需求背景存储需求: 程序所需的存储空间越来越大存储体系结构: 这个在计算机组成原理里面学过,不同层次之间的访问时间差了几个数量级操作系统(Operating System, OS)对内存的抽象原创 2018-04-02 16:09:06 · 1073 阅读 · 0 评论 -
操作系统笔记:(一)物理内存分配1:连续内存分配
remark: 这是我准备考研期间看学堂在线清华大学的OS MOOC的笔记,由于博主不是科班出身,所写错误可能很大,望大家指正.本文结构如下:计算机内存管理概述连续内存分配碎片整理e.g: 伙伴系统(Buddy System)计算机内存管理概述首先我们知道计算机的内存是分很多层次的,不同层次之间访存速度相差很大,(甚至达到几个数量级) MMU 工作原理介绍W...原创 2018-03-27 15:37:06 · 1915 阅读 · 1 评论 -
操作系统笔记:(四) 页面置换算法
本篇文章简要总结虚拟存储中的页面置换算法,结构组织如下:相关概念局部置换算法全局置换算法相关概念设计目标减少页面 swap in/out 次数把未来不在访问或者短期内不在访问的页调出页面锁定有些页是不用调出的描述必须常驻内存中的逻辑页OS 的关键部分要求响应速度的 code/data页表项中的锁定页(lock bit)评价方法记录访存的页面轨迹(编号)模拟/记录缺页次数原创 2018-04-02 21:24:31 · 503 阅读 · 0 评论 -
CPU访存过程
操作系统管理的是虚拟存储,在操作系统笔记:(三)虚拟内存分配我曾谈过虚拟存储,即OS将逻辑地址转化为物理地址的过程,这部分是软件(OS)完成的,实际上,在硬件层我们还有Cache缓存做命中工作,提高访问效率,两者结合就构成了CPU的完整访存过程。简单的说,分以下几步:操作系统的存储管理(虚拟存储)将逻辑地址转化为物理地址(这里面也有缓存,TLB页表缓存)看Cache能否命中,命中则直接访存,否则原创 2018-04-10 09:28:19 · 6129 阅读 · 0 评论 -
操作系统笔记:(二)物理内存分配2:非连续内存分配
本文组织结构如下:动机段式页式段页式非连续内存分配动机提高内存利用率(没有外碎片)允许程序使用非连续地址共享代码和数据动态加载和链接需要实现的依然是从逻辑地址到物理地址的转换。段式段式就是将内存分成很多个段,段与段之间不连续,但每个段是连续的。(e.g.: 代码段,数据段,堆栈段…)下图是一种硬件实现方式 逻辑地址是一个段号和段偏移,O...原创 2018-03-27 16:38:07 · 567 阅读 · 0 评论 -
操作系统笔记:(九)信号量与经典同步问题
这节讲解操作系统用信号量机制解决同步问题,先讲解他的基本实现,然后在讲解用信号量机制解决经典的同步问题:生产者消费者问题读者写者问题哲学家就餐问题主要讲的进程同步方法如下,这一节讲信号量,下一节讲解管程remark 这一节进程和线程的概念通常是互通的,不加详细区分,仅作为CPU的调度单位信号量是什么信号量是os提供的管理同步问题的一种手段,具体来说,他有一个整数变量记录当前可供使用的标记信号原创 2018-04-16 20:23:14 · 1287 阅读 · 0 评论 -
操作系统笔记:(六)线程
本文讲解线程相关模型,先用一个例子讲解为什么需要引入线程,然后讲解线程的概念,最后讲解用户线程和内核线程本文内容组织如下:线程的引入用户线程内核线程线程的引入考虑一个播放器的程序,那么我们可以怎么实现呢,先看,单进程的实现方法: 这里面会存在两个问题:Read(),函数主要时间开销是在 I/O,Decompress(),时间开销主要在CPU,让CPU等待影响资源效率读的时间开销如果很大原创 2018-04-04 16:08:59 · 271 阅读 · 0 评论 -
操作系统笔记:(八)进程同步
有关进程同步的问题,我主要分3节来表述,第一节就是本节主要讲一些底层的同步方法: 禁用中断,软件方法,锁机制。第二节即下一节主要是讲信号量机制,第三节主要讲管程机制本节内容组织如下:同步互斥的背景同步互斥的解决方案,禁用中断,软件方法,锁机制同步互斥的背景如果程序之间是独立的,没有并发的,那么肯定不会出现同步互斥问题。由于引入了操作系统对进程的调度,特别是中断机制允许在任何时候发生中断切换到下原创 2018-04-13 15:27:38 · 551 阅读 · 0 评论 -
操作系统笔记:(十续) 哲学家就餐问题(java 实现)
关于哲学家就餐问题的完整解答可参见:Dining philosophers problem里面列出了3种解法:服务生解法资源分级解法Chandy/Misra solution这里会陆续给出3种解决方案服务生解法一个简单的解法是引入一个餐厅服务生,哲学家必须经过他的允许才能拿起餐叉。因为服务生知道哪只餐叉正在使用,所以他能够作出判断避免死锁。为了演示这种解法,假设哲学家依次标号为A至E。如果A原创 2018-04-23 16:43:09 · 1459 阅读 · 0 评论 -
操作系统笔记:(十)管程
这一节是操作系统进程同步问题的最后一节,主要总结一下关于管程的相关概念。关于进程同步问题的其他解决方法可参见:操作系统笔记:(0)学堂在线Thu MOOC笔记目录 中的八,九讲。我们依然通过一下几部分来讲解管程:管程引入条件变量Hansan管程与Hoare管程管程解决生产者消费者问题java中的管程管程解决哲学家就餐问题管程引入首先回顾一下上一篇blog中的进程同步解决图信号量作为高层原创 2018-04-17 23:35:24 · 6137 阅读 · 0 评论 -
操作系统笔记:(十一)死锁及银行家算法实现
本文讲解操作系统的死锁,主要分为以下几个部分:资源分配图死锁特征死锁处理 死锁预防死锁避免死锁检测死锁恢复银行家算法实现资源分配图资源分配图就是用圆圈和方块分别表示进程和资源,资源中的小圆点的个数表示资源数目,如下图 其中从一个进程指向一个资源的边称为等待边,也叫申请边,就是申请一个资源; 而从一个资源指向进程的边称为占有边,也叫分配边,表示这个资源...原创 2018-04-25 17:05:28 · 577 阅读 · 0 评论 -
如何 gitignore .gitignore
场景:有一个 repo,现在想要加一个文件,但不想被tracking,很自然的想法是将它放在 .gitignore 中,但是同时又不想 .gitignore被tracking 应该怎莫办呢?.gitignore 在被 tracking(commit) 之前 可以直接在 .gitignore 文件中将它自己加上如果 .gitignore 已经被tracking 了,那更好的方式是将 igno...原创 2019-03-07 11:31:10 · 812 阅读 · 0 评论