操作系统
文章平均质量分 81
狱典司
异步但IO!
展开
-
mmap(内存映射)、sendfile() 与零拷贝技术
对于一个IO操作而言,都是通过CPU发出对应的指令来完成的,但是相比于CPU来说,IO的速度太慢了,CPU有大量时间处于等待IO的状态,因此就产生了DMA直接内存访问技术,本质上来说DMA就是一块主板上独立的芯片,通过它来进行内存和IO设备的数据传输,从而减少了CPU的等待时间,但是不论是谁来拷贝,频繁的拷贝耗时也是对性能的影响。一次简单的传统IO过程,发生了4次用户态和内核态的上下文切换,这在高并发场景下无疑会对性能产生极大的影响。原创 2023-01-07 11:42:11 · 2033 阅读 · 0 评论 -
共享内存原理与使用
不同进程之间共享的内存通常为同一段物理内存。就好比,我要和人solo(通信),我创建了一个房间(共享内存),这个房间就有了房间号(共享内存的ID),是个人都能进这个房间,根本没法通信,所以我们要设置房间密码。第一,和创建进程类似,进程被创建的时候,会被分配一个pid来标识这个进程的唯一性,同时也方便OS管理这些进程,因此共享内存在被创建的时候,会被分配一个“ID”来标识唯一性。第二,共享内存可以允许存在多个,为了区分这些共享内存,我们上面引入了“ID”的概念,但是要如何让两个进程连上同一个共享内存呢?原创 2023-01-07 11:33:47 · 1593 阅读 · 0 评论 -
进程间的8种通信方式
无名管道( pipe )、高级管道(popen)、有名管道(named pipe)、消息队列( message queue )、信号量( semophore ) 、信号 ( sinal ) 、共享内存( shared memory ) 、套接字( socket )。进程的亲缘关系通常是指父子进程关系。将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。套解字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。原创 2023-01-07 11:26:59 · 2115 阅读 · 0 评论 -
虚拟地址空间相关知识网络(段页存储 -- MMU -- 虚拟地址 -- 内核区 -- 用户区)
段页式存储 ----> 逻辑地址到物理地址映射(MMU) ----> 进程地址空间(用户地址空间和PCB)-----> 缺页中断和缺页请求原创 2023-01-07 11:24:25 · 1464 阅读 · 0 评论 -
C/C++ 32位浮点型float转16进制并用字符串输出,简洁明了
C/C++ 32位浮点型float转16进制并用字符串输出C 语言中,指针地址就是IEEE 754 16进制编码,C可以直接调用就不用写函数计算了,C++也是一样的。联合体共用一段内存,可以用一个包含float和char[4]的联合体,给float赋值,然后打印4个char就行;提供一个在线转换工具:在线进制转换(支持在2~36进制之间进行任意转换)代码32位浮点型float(字符串形式)转16进制并用字符串输出#include <stdio.h>#include <s原创 2022-04-06 18:14:20 · 7668 阅读 · 0 评论 -
5w字总结 Unix系统编程学习笔记(面试向)(Unix环境高级编程/Unix环境程序设计)
文章目录一、计算C语言的数据表示与处理计算C语言的基本运算操作内存表和符号表类型转换函数类型的分析指令复合指令句法函数函数激活(Activation Record)函数激活定义函数激活存储内容二、并发多道程序设计和分时Unix分时:存储的保存和加载中断(interrupt)时钟中断( Clock Interrupt )系统调用(system call)进程切换(上下文切换)分时的实现应用层并发三、程序、进程和线程什么是程序?什么是进程?进程的状态有哪些?其转换关系是怎么样的?进程什么时候开始产生/运行?什么原创 2022-01-07 22:05:08 · 4460 阅读 · 0 评论 -
监控文件描述符的六种方式(进程监控、select、poll、非阻塞轮询I/O、异步I/O、线程监控)
监控文件描述的六种方式方法1:用进程来监控文件描述符方法2 :使用select来监视文件描述符select函数代码示例使用poll来监视文件描述符poll函数代码示例阻塞型读操作会使调用程序一直阻塞到输入可用为止。当进程要从多个源端接收输人时这样的阻塞会引起一些问题,因为进程无法知道下一个输入是由哪个文件描述符产生的。因为服务器需要从多个客户机接收输入,所以多文件描述符问题通常都出现在客户机-服务器结构的编程中。下面列出了POSIX中六种常见的监视多个文件描述符的输入的方法。1.每个文件描述符都由一个原创 2021-11-09 17:16:34 · 3499 阅读 · 0 评论 -
Unix系统编程 信号部分学习笔记
《Unix系统编程》Unix信号学习笔记一、 基础概念二、 信号的产生三、对信号掩码和信号集进行操作四、捕捉与忽略信号 —— sigaction五、等待信号 —— pause、sigsuspend和sigwait六、信号处理:错误和异步信号安全七、用siglongjmp和sigsetjmp进行程序控制一、 基础概念信号是对事件(小事件)相关进程的软件层面通知;有发出者和接收者(都是进程)–> 进程间通信信号实际类型:int信号的产生、递送、挂起:产生:导致信号发生的事件递送:传原创 2021-11-05 19:02:30 · 676 阅读 · 0 评论 -
用图片带你串起进程列表、进程控制块、inode节点、文件描述符列表、文件实体、文件系统等知识
万文长篇,深入浅出地从进程讲起,用最简单明了的图片带你串起进程列表、进程控制块、inode节点、文件描述符列表、文件实体、文件系统等知识(深度好文,建议收藏)前言总览一、进程、线程1.1 什么是程序?1.2 什么是进程?1.3 什么是线程?二、进程列表2.1 PCB —— 进程控制块2.2 小程序 —— 查看进程列表三、进程实体3.1 用户地址空间(VM)3.2 进程实体与PCB、VM、PL的关系:3.3 联系线程列表四、通过进程联系文件系统4.1 文件系统对文件的管理系统(打开)文件表4.2 文件描述符原创 2021-10-11 23:01:16 · 1444 阅读 · 3 评论 -
详解Linux下静态库/动态库的生成和使用(含代码示例和操作流程)&&动态库和静态库的区别
文章目录一、库的概念Windows的库Linux的库二、动态库和静态库的区别1. 载入顺序不同2. 大小与共享的差异3. 库函数调用的差异三、静态库的创建和使用1. 创建静态库的步骤:(一)、ar命令的使用方法(二)、生成静态库的实例2. 调用静态库的测试程序(一)调用静态库的测试程序:test.c(二)编译使用了库函数的程序四、动态库的创建和使用1. 动态库的创建2. 动态库的使用3. 通过调用系统函数来使用动态链接库的实例关于gcc的使用方法可以参考下方链接博客:Linux下详解gcc编译过程(原创 2021-09-25 18:26:50 · 12902 阅读 · 0 评论 -
如何用C/C++写一个Linux文件系统模拟器
用C/C++写一个Linux文件系统模拟器1. 程序演示1. 登录--login2. 切换目录--- cd3. 展示文件列表---ls4. 查看物理块使用情况以及物理块存储内容 — df5. cd命令的延伸 :6. 查看当前目录名和父目录名 —— now7. 创建文件—— touch8. 打开文件 —— open9. 查看当前活动文件 —— ASL10. 写文件操作 —— write11. 读文件的全部内容 —— cat12. head -num 读取文件头num行13. tail -num 读原创 2021-09-07 18:55:40 · 3073 阅读 · 9 评论 -
CentOS 7如何安装 libbsd-dev && 编译apue.3e时出错处理(以便使用Unix环境高级编程中的apue.h库)
1. 首先需要下载源代码压缩包:UNIX高级环境编程的源代码 – src.3e.tar.gz2. 在CentOS-7下解压源代码文件tar -zxv -f src.3e.tar.gz -C /usr/include/3. 转到解压后的apue.3e/目录下进行make编译:make4. 进行编译后报错信息为:gcc -ansi -I…/include -Wall -DLINUX -D_GNU_SOURCE barrier.c -o barrier -L…/lib -lapue -原创 2021-09-06 20:56:45 · 1844 阅读 · 0 评论 -
保姆级swap分区详解!手把手带你创建swap分区(两种方式,建议收藏)涉及fdisk、gdisk、df、parted、partprobe、mkswap、swapon、free、dd、od等命令
Swap分区的详解 && 创建什么是swap分区?方法一:使用物理分区创建Swap分区1. 利用fdisk / gdisk在磁盘上划出一个分区1.1 lsblk —— 查看本机的磁盘分区基本情况1.2 df 命令 —— 查看磁盘空间利用率1.3 parted命令 —— 列出磁盘的分区表类型与分区信息1.4 fdisk / gdisk命令 —— 磁盘管理1.5 partprobe —— 更新Linux内核分区表信息2. 创建swap格式2.1 mkswap命令 —— 格式化Swap分区2.2原创 2021-07-16 23:43:53 · 16813 阅读 · 4 评论 -
Linux中以@结尾的文件
进入/bin目录原创 2021-07-10 14:20:07 · 1730 阅读 · 0 评论 -
一文带你捋清 Linux根目录下常见文件目录(etc/ dev/ var/ bin/ sbin/ lib/ proc/ tmp/等)建议收藏
目录说明binbin是binary的缩写,是UNIX类操作系统中根目录的标准子目录,包含可执行的程序(即准备运行的程序),以便达到启动(即启动)和修复系统的最小功能。打开 bin目录我们发现。这里面有我们常用的很多命令:cat、mv、cp、su、等。所以这里面存放着使用者最经常使用的命令。·/bin是系统默认的路径,它是系统发出命令时搜索相应程序的目录列表。这意味着,只要在命令行中输入文件名,然后按下Enter键,就可以运行/bin中的对应的可执行文件(即,可运行程序)从而达到我们执行...原创 2021-07-10 14:02:44 · 2086 阅读 · 1 评论 -
操作系统—王道考研学习笔记 <3.1_7>基本地址变换机构
视频传送门:操作系统—王道考研学习笔记 <3.1_7>基本地址变换机构从逻辑地址到物理地址的过程:学到这的时候应该知道对于计算机来说,知道了逻辑地址A(和页表大小)就等于隐式地知道了页号P和页内偏移量(如果记忆模糊建议翻看上一篇学习笔记)为什么给页面大小打上括号?这就是一个逻辑问题了哈哈,既然有了页表那肯定就知道了页面大小,因为页表中页表项存储的唯一数据——页表长度的计算就依赖于页面大小注意:留意越界的判断!页表项的解释在上一篇学习笔记已总结例题 1:注意:对于计算机来说页内原创 2021-06-19 14:10:38 · 308 阅读 · 0 评论 -
操作系统—王道考研学习笔记 <3.1_6> 分页存储管理
对应课程视频链接 : 王道考研—操作系统 — 分页存储管理分页存储管理的先导知识:非连续固定分区分配导入正式概念:注意:(1)进程可以被分块,内存也可以被分块(2)内存块 = 物理块 = 页框 = 页帧,是内存上的结构(3)而对于进程来说,进程被分成的原单位为页面(页),且每个页面有页号,页号从0开始动态重定位:将进程放入内存时不着急计算物理地址,当需要调用时再计算物理地址,利用了重定位寄存器,重定位需要硬件支持注意:二进制换算的一些小tips(1)2的多n次方化成十进原创 2021-06-19 13:20:55 · 719 阅读 · 1 评论 -
Rsync核心算法讲解
目录1. 分块Checksum算法2. 传输算法3. checksum查找算法4. 比对算法5. 例图建议结合阅读文章:Rsync镜像备份工作原理(含流程示意图)为了方便理解,假设:同步源文件名为fileSrc,同步目的文件叫fileDst1. 分块Checksum算法(1). 首先,把fileDst的文件平均切分成若干个小块比如每块512个字节(最后一块会小于这个数)(2). 然后对每块计算两个checksum(校验和)一个是rolling checksum,是32位的弱原创 2021-05-25 23:32:02 · 690 阅读 · 0 评论 -
Rsync镜像备份工作原理(含流程示意图)
目录1. 概念2. 特性3. 流程示意图4. 工作原理(1) 进程和角色(2)进程开始(3)The Files list(文件列表)(4)The Pipeline(管道)(5)The Generator(6)The Sender(7)The Receiver(8)The Daemon1. 概念rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。2. 特性可以镜像保存整个目录树和文件系统。原创 2021-05-25 21:44:03 · 1910 阅读 · 1 评论 -
利用PDO.so连接并读取Mysql数据库 核心代码实现讲解
目录Pre. 准备测试连接1. 结构化编程代码 <1.1>代码 <1.2>2. 面对对象编程代码 <2.1>代码 <2.2>Pre. 准备建议阅读本文前先大致浏览下方链接文章 :PDO.so中PDO类以及PDOStatement类的相关方法、预定义汇总查看数据库的基本操作请阅读下方连接文章:超全!Mysql数据库 常用基本操作总结(含快速索引目录)利用PDO.so连接数据库并读取Mysql数据库数据有两种编程方式可以考虑:结构化编程,即面向原创 2021-05-18 22:34:24 · 404 阅读 · 0 评论 -
超全!Mysql数据库 常用基本操作总结(含快速索引目录)
Mysql数据库 常用基本操作<1> 数据库 & 表 基本操作1.登陆数据库2.建立数据库3.查看数据库4.在指定库中建表5.查看表结构6.在表中查询指定的内容7.快速查询表中所有内容8.向指定表中添加内容9.清空指定表10.删除n行数据11.删除表12.删除库———————————————————<2> 数据库的数据类型(1) MySQL的数据类型1、整型2、浮点型(float和double)3、定点数5.二进制数据(_Blob)6.日期时间类型(2) 数据类型的属性特别说原创 2021-05-12 23:13:22 · 1730 阅读 · 2 评论 -
操作系统实验 分区管理
操作系统实验 — 分区管理Pt1.原理可变分区调度算法最先适应算法(first fit algorithm)最佳适应算法(best fit algorithm)最坏适应算法(worst fit algorithm)思路步骤内存分配内存回收分区管理的主要优缺点1. 优点2. 缺点Pt2. 源码实现Pt1.原理————————————————————————————可变分区调度算法1.最先适应分配算法2.最优适应分配算法3.最坏适应算法注:本文代码部分采用最先适应分配方法最先适应算法(first原创 2021-05-11 19:16:10 · 1421 阅读 · 1 评论 -
操作系统实验 生产者/消费者模型
注:本文上半部分为原理,下半部分为实现生产者 / 消费者模型:生产者消费者模型具体来讲,就是在一个系统中,存在生产者和消费者两种角色,它们通过内存缓冲区进行通信。概况描述:· 两个或者更多的进程(线程)共享同一个缓冲区;· 其中一个或多个进程(线程)作为“生产者”向缓冲区中添加数据;· 另一个或者多个进程(线程)作为“消费者”从缓冲区中取走数据;· 生产者和消费者必须互斥的使用缓冲区;· 缓冲区空时,消费者不能读取数据;· 缓冲区满时,生产者不能添加数据。优点:(1) 解耦:· .原创 2021-05-06 22:29:23 · 4521 阅读 · 7 评论