外存

十 一、I/O操作之系统调用(二)

独自空忆成欢 提交于 2020-08-13 16:03:48
我们可以用系统调用来操作文件,这种方式和 I/O库函数 各有千秋,我们需要明白库函数在用户地址空间执行,系统调用是在内核地址空间执行,依赖Linux系统,不要搞混了,那我们下面来学习一下。 文章目录: 一、基本概念 (一)文件描述符 (二)带缓冲区的I/O && 不带缓冲区的I/O (三)man指令 (四)基础中断机制知识 二、系统调用文件I/O函数 (一)open (二)read (三)write (四)close (五)lseek 三、系统调用的过程 四、例题 一、基本概念 (一)文件描述符 系统调用是在内核空间执行的,那么我们就需要了解在内核中是如何标识文件的。对于内核而言,所有打开的文件都通过文件描述符(简称fd)引用就是标识。 文件描述符是一个非负整数 ,指代被打开的文件,当打开一个现有的文件或创建一个新文件时,内核向进程返回一个文件描述符,将其作为参数给系统调用的I/O操作。 POSIX标准要求每次打开文件时,必须从小到大申请文件描述符,那么最小的文件描述符是几呢?不是0,因为系统已经规定了前三个: 文件描述符 POSIX名称 (常量定义在头文件<unistd.h>) 用途 stdio流 0 STDIN_FILENO 标准输入 stdin 1 STDOUT_FILENO 标准输出 stdout 2 STDERR_FILENO 标准错误 stderr

STL常用序列容器

时间秒杀一切 提交于 2020-08-13 08:30:42
这里简要的记述一下STL常用容器的实现原理,要点等内容。 vector vector 是比较常用的stl容器,用法与数组是非类似,其内部实现是连续空间分配,与数组的不同之处在于可弹性增加空间,而 array 是静态空间,分配后不能动态扩展。 vecotr 的实现较为简单,主要的关键点在于当空间不足时,会新分配当前空间2倍的空间,将旧空间数据拷贝到新空间,然后删除旧空间。 struct _Vector_impl: public _Tp_alloc_type { pointer _M_start; // 元素头 pointer _M_finish; // 元素尾 pointer _M_end_of_storage; // 可用空间尾, // 省略部分代码... }; 这个是向尾部添加元素的代码实现,可以看到如果当前还有剩余空间的话,直接在尾部添加,如果没有剩余空间,则会动态扩展。 void push_back(const value_type& __x) { if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) { _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, __x); ++this->_M_impl._M_finish; }

主存、辅存、内存、外存、存储器是什么?还傻傻分不清楚?看完这一篇就够了

这一生的挚爱 提交于 2020-08-13 03:09:06
现代计算机硬件由五大部件组成,分别是运算器、控制器、存储器、输入设备和输出设备。 而存储器的存在对于计算机来说起着不可或缺的作用。在CPU的内部,存在着许多的存储器,这些存储器叫做寄存器,用来暂时存放数据或者指令。正是因为有了这些寄存器,CPU才能快速高效地处理计算机中复杂地工作。而与寄存器并称为内部存储器的还有内存。内存也被称为主存,而辅存指的是计算机的外部存储、例如,硬盘、U盘、软盘以及光盘等等。 内存 内存又称主存,是CPU能直接寻址访问的存储空间。在计算机工作的时候,所有的数据都要先经过内存,然后才能交由处理器去处理,内存也被称为,CPU与外存通信的桥梁。它的特点是读写速度快。 内存一般是由半导体器件组成,可分为 RAM(随机存储器) 、 ROM(只读存储器) 、 Cache(高速缓存) 。 RAM(Random Access Memory),随机访问存储器 表示既可以从中读取数据,也可以从中写入数据,但是断电后数据就会消失。我们现在所使用的内存条,其实就是RAM集成块集中在一起的一块小电路板,它插在计算机的内存插槽上。而RAM又分为两种,DRAM(动态随机存储)和SRAM(静态随机存储)。 DRAM 动态随机存储,存储单元是由电容和相关元件组成的,电容存在漏电现象,电荷不足会导致存储单元数据出错,所以DRAM需要周期性刷新,以保持电荷状态。DRAM结构较简单且集成度高

进程、线程基础知识全家桶,30 张图一套带走

强颜欢笑 提交于 2020-08-12 23:03:41
前言 先来看看一则小故事 我们写好的一行行代码,为了让其工作起来,我们还得把它送进城( 进程 )里,那既然进了城里,那肯定不能胡作非为了。 城里人有城里人的规矩,城中有个专门管辖你们的城管( 操作系统 ),人家让你休息就休息,让你工作就工作,毕竟摊位不多,每个人都要占这个摊位来工作,城里要工作的人多着去了。 所以城管为了公平起见,它使用一种策略( 调度 )方式,给每个人一个固定的工作时间( 时间片 ),时间到了就会通知你去休息而换另外一个人上场工作。 另外,在休息时候你也不能偷懒,要记住工作到哪了,不然下次到你工作了,你忘记工作到哪了,那还怎么继续? 有的人,可能还进入了县城( 线程 )工作,这里相对轻松一些,在休息的时候,要记住的东西相对较少,而且还能共享城里的资源。 “哎哟,难道本文内容是进程和线程?” 可以,聪明的你猜出来了,也不枉费我瞎编乱造的故事了。 进程和线程对于写代码的我们,真的天天见、日日见了,但见的多不代表你就熟悉它们,比如简单问你一句,你知道它们的工作原理和区别吗? 不知道没关系,今天就要跟大家讨论 操作系统的进程和线程 。 提纲 正文 进程 我们编写的代码只是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着 CPU 会执行程序中的每一条指令,那么这个 运行中的程序,就被称为「进程」 。

操作系统复习概要(超经典最全)

浪尽此生 提交于 2020-08-12 15:39:31
操作系统复习概要(超经典) 第一章 操作系统引论需要掌握以下内容: 什么叫操作系统? 操作系统是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充。 操作系统的作用主要表现在哪些方面? ⑴、OS作为用户与计算机硬件系统之间的接口 ⑵、OS作为计算机系统资源的管理着 ⑶、OS实现了对计算机资源的抽象 分时系统的基本特征? 多路性,允许多个用户共享一台计算机 独立性,每个用户在各自的终端上进行操作,彼此之间互不干扰 及时性,用户的请求能够在很短的时间内得到响应 交互性,用户可以通过终端与系统进行广泛的人机对话。其广泛性表现在,用户可以请求系统提供多方面的服务,如进行文件编辑和数据处理,访问系统中的文件系统和数据库系统,请求提供打印服务等。 操作系统的基本特征是什么? 并发,提供系统中的资源利用率,增加系统的吞吐量 共享,系统中的资源可供内存中的多个并发执行的进程共同使用。 虚拟,通过某种技术将一个物理实体变为若干个逻辑上的对应物的功能。 异步,以人们不可预知的速度向前推进的,是以“走走停停”的方式运行 第二章 进程的描述与控制需要掌握以下内容: 何谓进程?进程与程序的区别? 为了提高资源的利用率和系统吞吐量。通常采用多道程序技术,将多个程序同时装入内存,并使之并发运行,传统意义上的程序不能够独立运行。这时作为资源分配和独立运行的基本单位都是进程 区别:1.进程是动态的,程序是静态的

第一章 操作系统引论

六月ゝ 毕业季﹏ 提交于 2020-08-12 14:32:23
第一章 操作系统引论 1.1 操作系统的目标和作用 1.1.1 操作系统的目标 方便性、有效性、可扩充性和开放性 方便性的目的是让计算机变得易学易用; 有效性的第一层含义是提高系统资源的利用率,方便性和有效性是设计OS时最重要的两个目标; 为适应硬件、体系结构以及计算机应用发展的要求,OS必须具有很好的可扩充性,可扩充性的好坏与OS的结构有着十分紧密的联系; 开放性即遵循世界标准规范,特别是遵循开放系统互连OSI国际标准。 1.1.2 操作系统的作用 OS作为用户与计算机硬件系统之间的接口 OS作为接口的示意图: OS作为计算机系统资源的管理者 OS实现了对计算机资源的抽象 I/O软件隐藏了I/O操作实现的细节: 1.1.3 推动操作系统发展的主要动力 不断提高计算机资源利用率 方便用户 器件的不断更新换代 计算机体系结构的不断发展 不断提出新的应用需求 1.2 操作系统的发展过程 1.2.1 未配置操作系统的计算机系统 人工操作方式 缺点: (1)用户独占全机 (2)CPU等待人工操作 脱机输入/输出方式(I/O方式) 优点: (1)减少了CPU的空闲时间 (2)提高I/O速度 脱机I/O示意图: 1.2.2 单道批处理系统 处理过程 缺点 最主要的缺点是:系统中的资源得不到充分的利用 原因:在内存中仅有一道程序,每逢该程序在运行中发出I/O请求后,CPU便处于等待状态

2016年+2018年访存大题

半城伤御伤魂 提交于 2020-08-12 14:31:41
【知识回顾】 https://blog.csdn.net/qq_35812205/article/details/104526406 之前总结的虚实地址转换&访存细节。 【真题1】 (1)求字段A~G的位数,TLB中B字段存啥信息 【解析】 简单板子题 。页大小2^13B即页内偏移13bit A=32-13=19bit,C=24-13=11bit 主存块=64B=2^6B,所以块内偏移=6bit=G 物理地址拆分成EFG(分别为Tag、组号、块内偏移6bit)共24bit 因为是Cache是二路组,而共64KB/(2×64B)=2^9组,所以F=9bit,E=24-F-G=24-9-6=9bit 即(Tag9bit、组号9bit、块内偏移6bit) 由于TLB是虚页号和实页号的映射,所以B虚页号=A=19bit。 (2)将块号为4099的主存块装入Cache时,求所映射的Cache组号,求H 【解析】 法一(十进制角度):由于组相联是 组间直接映射,组内全相联映射 (即 先对每组第一个依次存,再对每组第二个依次存...以此类推 ),由(1)已知Cache共2^9组,4099%2^9=3,所以组号为3。 法二(二进制角度):块号4099=00 0001 0000 0000 0011(写出18bit),根据末尾的9位0 0000 0011B=3为组号。 从法二的前9位字段Tag知道H

排序算法(2)

大城市里の小女人 提交于 2020-08-12 01:03:24
一、快速排序 代码实现: //快速排序 public static void fastSort ( int [ ] arr ) { //1、选取基准值 //2、让left从左往右找比基准值大的,right从右向左找比基准值小的 //3、再针对两个区间递归的进行之前的操作 quickHelper ( arr , 0 , arr . length - 1 ) ; } public static void quickHelper ( int [ ] arr , int left , int right ) { if ( left >= right ) { //如果集合中只有一个元素或者没有元素,就不需要排序,直接返回 return ; } //先找一个基准值 int index = partition ( arr , left , right ) ; //递归的进行左右区域 quickHelper ( arr , left , index - 1 ) ; quickHelper ( arr , index + 1 , right ) ; } public static int partition ( int [ ] arr , int left , int right ) { //先选取最后一个元素为基准值 int baseValue = arr [ right ] ; int i =

elasticsearch运维实战之2

丶灬走出姿态 提交于 2020-08-11 23:26:59
elasticsearch性能调优 集群规划 独立的master节点,不存储数据, 数量不少于2 数据节点(Data Node) 查询节点(Query Node),起到负载均衡的作用 Linux系统参数配置 文件句柄 Linux中,每个进程默认打开的最大文件句柄数是1000,对于服务器进程来说,显然太小,通过修改/etc/security/limits.conf来增大打开最大句柄数 * - nofile 65535 虚拟内存设置 max_map_count定义了进程能拥有的最多内存区域 sysctl -w vm.max_map_count=262144 修改/etc/elasticsearch/elasticsearch.yml bootstrap.mlockall: true 修改/etc/security/limits.conf, 在limits.conf中添加如下内容 * soft memlock unlimited * hard memlock unlimited memlock 最大锁定内存地址空间, 要使limits.conf文件配置生效,必须要确保pam_limits.so文件被加入到启动文件中。 确保/etc/pam.d/login文件中有如下内容 session required /lib/security/pam_limits.so 验证是否生效 curl

操作系统原理总结

孤者浪人 提交于 2020-08-11 20:12:50
made by @ 杨领well (yanglingwell@sina.com) 一、基础知识点 1. 操作系统的资源管理技术 资源管理解决 物理资源数量不足 和 合理分配资源 这两个问题。 操作系统虚拟机为用户提供了一种简单、清晰、易用、高效的计算机模型。虚拟机的每种资源都是物力资源通过 复用 、 虚拟 和 抽象 而得到的产物。 虚拟机提供进程运行的逻辑计算环境。从概念上来说,一个进程运行在一台虚拟机上,可以认为一个进程就是一台虚拟机,一台虚拟机就是一个进程。 复用 : 空分复用共享 和 时分复用共享 。 a. 空分复用共享(space-multiplexed sharing): 将资源从“空间”上分割成更小的单位供不同进程使用。在计算机系统中,内存和外存(磁盘)等是空分复用共享的。 b. 时分复用共享(time-multiplexed sharing): 将资源从“时间”上分割成更小的单位供不同进程使用。在计算机系统中,处理器和磁盘机等是时分复用共享的。 虚拟 :对资源进行转化、模拟或整合,把一个物理资源转变成多个逻辑上的对应物,也可以把多个物理资源变成单个逻辑上的对应物,即创建无须共享独占资源的假象,或创建易用且多于实际物理资源的虚拟资源假象,以达到多用户共享一套计算机物理资源的目的。虚拟技术可用于外部设备(外部设备同时联机操作(SPOOLing)),存储资源(虚拟内存