计算机操作系统
wang13342322203
这个作者很懒,什么都没留下…
展开
-
程序的机器级表示
原地址:https://www.cnblogs.com/yweihum/p/7410960.html1.1程序编码与汇编1.1.1C语言程序的编译系统一个C语言程序需要经过四个阶段才能变成一个可执行的二进制代码。预处理阶段:预处理器cpp根据编译文件以“#”开头的命令,读取系统头文件stdio.h(.h结尾的表示头文件,.c表示可执行文件)的内容,并把它插入到程序文本中,得到一...转载 2019-06-06 12:18:27 · 161 阅读 · 0 评论 -
操作系统之异常控制流
1简介CSAPP- 深入理解计算机系统这本书断断续续的看了部分章节了, 但是在看到异常控制流这一章之前, 我没有想到操作系统在我们编写的程序中扮演着如此总要的角色。我看这本书的顺序没有按着目录顺序来, 一部分原因是为了适配学校的课程, 一部分是因为兴趣, 毕竟 部分内容看着更有趣些。现在看过的章节以及阅读顺序为:第一章 计算机系统漫游 第二章 信息的表示和处理 第三...转载 2019-07-20 11:56:11 · 172 阅读 · 0 评论 -
《深入理解计算机系统》| 虚拟存储器
虚拟存储器又叫做虚拟内存,我们现在的操作系统普遍都支持了虚拟内存,这样做是因为我们同时运行着太多的程序了,就目前我电脑的状态来看,我既要打开浏览器,又要听歌,可能同时还登陆的有QQ,如果不使用虚拟内存4G的内存空间很快就会被耗尽,而一旦没有了内存空间,其他程序就无法加载了。虚拟内存的出现就是为了解决这个问题,当一个程序开始运行的时候,其实是为每个程序单独创建了一个页表(这个以后讲),只将一部分...转载 2019-07-20 11:56:51 · 1109 阅读 · 3 评论 -
虚拟内存与物理内存的联系与区别
操作系统有虚拟内存与物理内存的概念。在很久以前,还没有虚拟内存概念的时候,程序寻址用的都是物理地址。程序能寻址的范围是有限的,这取决于CPU的地址线条数。比如在32位平台下,寻址的范围是2^32也就是4G。并且这是固定的,如果没有虚拟内存,且每次开启一个进程都给4G的物理内存,就可能会出现很多问题:因为我的物理内存时有限的,当有多个进程要执行的时候,都要给4G内存,很显然你内存小一点,这很快就...转载 2019-07-21 10:35:14 · 187 阅读 · 0 评论 -
进程同步和线程同步概述
楼主本来是要继续写服务器并发的,但是后续的服务器相关点都和进程线程联系在一起,所以先把进程线程相关内容写完吧! 这次只写进程线程的概述,实际操作后续博文逐一代码实现。进程同步or进程通信/线程同步or线程通信? 这两组概念迷惑我至今,网上和书籍对这个的描述也是爱用啥用啥的感觉,今天又重新理了一遍。什么是同步:同步就是数据保持一致,无论是进程还是线程,都是实现了代码执行流程的分支,多个分支同...转载 2019-07-24 15:41:17 · 1313 阅读 · 1 评论 -
Linux进程间通信之管道(pipe)、命名管道(FIFO)与信号(Signal)
整理自网络Unix IPC包括:管道(pipe)、命名管道(FIFO)与信号(Signal)管道(pipe)管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;实现机制:管道是由内核管理的一个缓冲区,相当于我们放入内存中的一个纸条。管道的一端连接一个进程的输出。这个进程会向管道中放入信...转载 2019-07-21 10:35:35 · 240 阅读 · 0 评论 -
linux线程及线程同步(锁的应用)
linux线程linux原本没有线程,后来在windows多线程编程影响下linux内核开发者在进程基础上在功能上做出了类似windows线程的linux版本的线程,linux线程归根到底还是进程,只不过是轻量级的进程,开销比真正进程要小得多,大家还是要明白linux与windows在线程方面功能虽然类似,但是底层实现是非常不同的。linux进程大概实现原理在进程的基础上创建线程,原本进程...转载 2019-08-02 17:09:10 · 281 阅读 · 0 评论 -
进程间的五种通信方式介绍
进程间的五种通信方式介绍来源:https://blog.csdn.net/wh_sjc/article/details/70283843进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Str...转载 2019-08-02 18:14:28 · 363 阅读 · 0 评论 -
后台面试经典问题-Epoll的两种触发方式
水平触发LT和边缘触发ET其中LT就是与select和poll类似,当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据一次性全部读写完(如读写缓冲区太小),那么下次调用 epoll_wait()时,它还会通知你在上次没读写完的文件描述符上继续读写ET:当被监控的文件描述符上有可读写事件发生时,epoll_wait()会...转载 2019-08-13 22:21:57 · 224 阅读 · 0 评论 -
缺页中断与页面置换算法
1 缺页中断: 进程线性地址空间里的页面不必常驻内存,在执行一条指令时,如果发现他要访问的页没有在内存中(存在位为0),那么停止该指令的执行,并产生一个页不存在异常,对应的故障处理程序可通过从外存加载该页到内存的方法来排除故障,之后,原先引起的异常的指令就可以继续执行,而不再产生异常。2 页面置换算法: 页式虚拟存储器实现的一个难点是设计页面调度(置换)算法,即将新页面调入内存时,...转载 2019-08-19 12:01:01 · 1655 阅读 · 0 评论 -
Linux下内存泄漏工具
概述 内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,在大型的、复杂的应用程序中,内存泄漏是常见的问题。当以前分配的一片内存不再需要使用或无法访问时,但是却并没有释放它,这时就出现了内存泄漏。尽管优秀的编程实践可以确保最少的泄漏,但是根据经验,当使用大量的函数对相同的内存块进行处理时,很可能会出现内存泄漏。 内存泄露可以分为以下几类: 1...转载 2019-08-19 18:32:02 · 160 阅读 · 0 评论 -
关于《深入理解计算机系统》中“异常控制流”的小故事
在阅读《深入理解计算机系统》的第八章“异常控制流”时,可能会出现这样一种情况:看完这一整章以后都不知道这章到底在讲什么,这章到底有什么用。这里我想通过一个生活中的小故事,将一些计算机中的概念转化为生活中的实例,让你对这章讲述的东西有个大体的了解,避免在阅读过程中出现不知道它是什么,不知道它到底有什么用这样的情况,从而能够更好的学习本章的内容。 这里我们将人 类比成一台计算机,人所要做的事情类...转载 2019-07-20 11:56:01 · 109 阅读 · 0 评论 -
计算机各层次如何处理异常控制流
在硬件层,硬件检测到事件会触发控制突然转移到异常处理程序。在操作系统层,内核通过上下文切换,将控制从一个用户进程转移到另一个用户进程。在应用层,一个进程可以发送信号到另一个进程,而接收者会将控制信号突然转移到他的一个信号处理程序。一个程序可以通过回避通常的栈规则,并执行其他程序中任意位置的非本地跳转来对错误作出反应。参考文章:https://www.jianshu.com/p/f...转载 2019-07-20 11:55:53 · 78 阅读 · 0 评论 -
操作系统学习笔记-异常控制流
从处理器家店开始,程序计数器会设置一个代码执行的序列,当执行完代码k之后执行代码K+1则称为控制转移,这样的控制转移则称作处理器的控制流。其中控制流有两种,一种为平滑的控制流,即没两行代码都是在存储器中相邻的,另外一种称为突变的控制流,也就是执行的代码不相邻。现代操作系统正是通过这种控制流突变实现系统的并发,我们也称这种控制流突变为异常控制流。异常控制流体现在系统的各个层次。在硬件层次...转载 2019-07-18 11:06:53 · 134 阅读 · 0 评论 -
第三章程序的机器级表示
原地址:https://www.cnblogs.com/disturbia/p/4869229.html第三章 程序的机器级表示3.1 历史观点Intel处理器系列俗称x86,开始时是第一代单芯片、16位微处理器之一。每个后继处理器的设计都是后向兼容的——较早版本上编译的代码可以在较新的处理器上运行。 X86 寻址方式经历三代: 1 DOS时代的平坦模式,不区分用...转载 2019-06-06 12:19:26 · 382 阅读 · 0 评论 -
第三章 程序的机器级表示
原地址:https://blog.csdn.net/weixin_41413441/article/details/79429915机器级代码计算机系统使用了多种不同形式的抽象,利用更简单的抽象模型来隐藏实现的细节。对于机器级编程来说,其中两种抽象尤为重要:1、指令集体系结构(Instruction set architecture ISA)它定义了处理器状态、指令的格式...转载 2019-06-06 14:53:39 · 186 阅读 · 0 评论 -
《深入理解计算机系统》第四章 处理器体系结构
原地址:https://www.cnblogs.com/wyz-1995/p/8465019.html《深入理解计算机系统》第四章 处理器体系结构我们看到的计算机系统都只限于机器语言程序级。处理器执行一系列指令每天指令执行某个简单操作,它们被编码为由一个或多个字节序列组成的二进制格式。在本章的学习中,我们主要了解ISA抽象的作用以及了解流水线和实现方式。4.1 Y86-64指令集体系结...转载 2019-06-14 16:33:33 · 270 阅读 · 0 评论 -
《深入理解计算机系统》|处理器体系结构
原地址:https://www.jianshu.com/p/15210eb3870d?open_source=weibo_search目录学习事物是怎样工作的有其内在价值:处理器是如何工作的对于我们普通人来说一直是个秘密,我们将从零开始构建一个流水线处理器,为了实现这一处理器的软硬件,我们有大量的前提知识要学习,包括:指令系统、硬件设计背景知识(hcl)、以及流水线的通用原理。学习完这...转载 2019-06-14 18:49:20 · 1591 阅读 · 0 评论 -
深入理解计算机系统(5.1)------优化程序性能
原地址:https://www.cnblogs.com/ysocean/p/7692286.html目录1、编写高效程序的切入点 2、编译器的优化能力和局限性 3、程序的性能表示 4、提高程序的性能方法 与机器无关: 与机器相关: 你能获得的对程序最大的加速比就是当你第一次让它工作起来的时候。 在讲解如何优化程序性能之前,我们首先要明确写程序最主要的...转载 2019-06-14 21:58:00 · 209 阅读 · 0 评论 -
《深入理解计算机系统》| 优化程序的性能
原地址:https://www.jianshu.com/p/4586dc676807编写运行的快的程序有三个因素:①选择合适的算法和数据结构;②理解编译器的能力,使用有效的方式让编译器能进行优化;③对于运算量特别大的程序,可能还需要进行任务分解。在这一过程中可能还需要对程序的可读性和运行速度进行权衡。在阅读这一章节的过程中花费了大量的时间对我自己的自动办公软件进行了优化,算是学以致用。...转载 2019-06-14 22:31:14 · 422 阅读 · 0 评论 -
《深入理解计算机系统》读后笔记三——“第六章 存储器层次结构”
原地址:https://blog.csdn.net/u011085626/article/details/46609245第六章——存储器层次结构1、存储器层次结构看这一章,首先了解存储器层次结构是什么。2、局部性:在存储器层次结构的基础之上引出了一个很重要的思想,也是计算机程序里面一...转载 2019-06-22 14:58:01 · 203 阅读 · 0 评论 -
《深入理解计算机系统》| 存储器层次结构
原地址:https://www.jianshu.com/p/88c889e4fef3目 录在本章中,我们会先了解存储技术(SRAM\DRAM\ROM\旋转固态硬盘),描述这些存储器是如何被组织成层次结构的。接下来会谈到什么是拥有良好局部性的程序以及编写这样的程序需要注意的问题。然后我们开始探究本质,为什么说拥有良好局部性的程序会执行的更快。就要求我们要学习高速缓存,并教会大家理解程序的...转载 2019-06-22 15:18:36 · 836 阅读 · 0 评论 -
《深入理解计算机系统 》 | 链接
原文:https://www.jianshu.com/p/7f27c0316355目 录链接是将各种不同文件的代码和数据部分收集(符号解析和重定位)起来并组合成一个单一文件的过程。本章节我们将要学习链接器工作的详细原理。通过对这一方面知识的学习,将有助于理解一些危险的编程错误、分离编译的过程、作用域的实现以及如何利用共享库等等。我们将静态链接和动态链接(加载时共享、运行时共享)两个大...转载 2019-07-01 17:16:32 · 301 阅读 · 0 评论 -
深入理解计算机系统(第3版) 第七章 链接
原文:1.链接链接是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行。链接可以执行于编译时,也就是在源代码被翻译成机器代码时;也可以执行于加载时,也就是在程序被加载器加载到内存并执行时;甚至执行于运行时,也就是由应用程序来执行。在早期的计算机系统中,链接是手动执行的。在现代系统中,链接是由叫做链接器的程序自动执行的。2.链接器...转载 2019-07-01 17:25:07 · 291 阅读 · 0 评论 -
多线程的优缺点及线程池的引入
简介典型的 UNIX 进程可以看作只有一个工作线程,CPU 在执行任务时实际上是在调度这些线程(线程是操作系统最小的执行单位),每一个线程都是由创建他的进程所管理,进程为线程分配资源,一个进程中的所有线程共享本进程数据,但每个线程也有自己私有的数据(线程ID、一组寄存器、栈、errno、信号屏蔽字、调度优先级)举个例子:操作系统相当于地主(CPU 负责调度,进程负责管理线程),进程相当于地主...转载 2019-08-23 15:05:41 · 592 阅读 · 0 评论