
Linux
文章平均质量分 64
gloryor
这个作者很懒,什么都没留下…
展开
-
I/O输入输出——I/O设备(块设备与字符设备)
从设备两个字我们应该了解它们属于操作系统的哪个部分,和什么部分交互,以及有什么性质和特征。块设备是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。这些数据片就称作块。最常见的块设备是硬盘,除此以外,还有软盘驱动器、CD-ROM驱动器和闪存等等许多其他块设备。注意,它们都是以安装文件系统的方式使用的——这也是块设备的一般访问方式。字符设备另一种基本的设备类型是字符设备。是一个顺序的数据原创 2021-09-23 17:25:13 · 1650 阅读 · 0 评论 -
内存、RAM、ROM、Cache的关系
1、内存内存在电脑中起着举足轻重的作用。内存一般采用半导体存储单元,包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)。2、RAMRAM:随机存取存储器(random access memory),又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。当电源关闭时RAM不能保留数据。如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)。我们通常购买原创 2021-09-23 09:55:09 · 43683 阅读 · 0 评论 -
自旋锁和互斥锁
背景我们知道互斥锁的概念经常和 进程(同步)通信 和 线程同步 等联系起来。自旋锁常常在内核同步的内容中。实现原理:在实现机制上,互斥锁属于sleep-waiting(睡眠等待)类型的锁。自旋锁则不然,它属于busy-waiting(忙等待)类型的锁。例如在一个双核的机器上有两个线程(线程A和线程B),它们分别运行在A和 B上。我们从线程来了解。假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正被线程B所持有,那么线程A就会被阻塞 (blo原创 2021-09-21 17:36:37 · 422 阅读 · 0 评论 -
Linux——虚拟文件系统
组成在Linux组成中我们知道,Linux内核可以分为 进程管理 内存管理 网络接口 设备驱动程序 以及 虚拟文件系统。背景和定义“一切皆是文件”是 Unix/Linux 的基本哲学之一。不仅普通的文件,目录、字符设备、块设备、 套接字等在 Unix/Linux 中都是以文件被对待;它们虽然类型不同,但是对其提供的却是同一套操作界面。而虚拟文件系统正是实现上述两点 Linux 特性的关键所在。虚拟文件系统(Virtual File System, 简称 VFS), 是 Linux...转载 2021-09-20 23:41:34 · 635 阅读 · 0 评论 -
Linux系统——组成与结构
结构图这是我在不同的文章看到的不同的形式,实际上只是侧重点不同。左图是分为用户空间 和 内核空间 ,用户空间有应用程序 和 glibc。 内核空间 包括 内核 和 系统调用。右图是应用软件,shell——用户界面的意思,提供了用户与内核进行交互操作的一种接口;系统调用,库函数,以及内核。Linux内核的结构都基本是这个形式内核包括,进程管理,内存管理,文件系统——文件系统有虚拟文件系统,网络接口,以及设备驱动程序——这个模块在更底层,访问硬件设备。每个部分都可以自行搜索,..原创 2021-09-17 15:41:43 · 165 阅读 · 0 评论 -
多线程——条件变量的概念和实现
概念条件变量,也称条件锁,是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:1)一个线程等待"条件变量的条件成立"而挂起;2)另一个线程使"条件成立"(给出条件成立信号)条件的检测是在互斥锁的保护下进行的如果一个条件为假,一个线程自动阻塞,并释放等待状态改变的互斥锁。如果另一个线程改变了条件,它发信号给关联的条件变量,唤醒一个或多个等待它的线程,重新获得互斥锁,重新评价条件。如果两进程共享可读写的内存,条件变量可以被用来实现这两进程间的线程同步函数API原创 2021-09-16 17:37:31 · 1312 阅读 · 0 评论 -
vscode插件分享
这里原创 2021-09-14 14:19:10 · 84 阅读 · 0 评论 -
可重入函数——学习笔记
什么是可重入函数?在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。可重入性是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。一般理解是一个函数在同时多次调用,在输入一定的情况下,输出结果必然固定, 不受任何其他情况的影响。比如int n = 0;//全局变量 int fun(int x){ n += x; retu原创 2021-09-13 10:57:05 · 322 阅读 · 0 评论 -
Linux的inode
inode是什么?——index node理解inode,要从文件储存说起。文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个sector组成一个block。文件数据都储存在“块”中,那么很显然,我们还必须找到一个地方原创 2021-09-11 22:58:36 · 139 阅读 · 0 评论 -
IO多路复用
了解什么是IO对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。所以说,当一个read操作发生时,它会经历两个阶段:1. 等待数据准备 (Waiting for the data to be ready) 等待客户端连接(conn ,addr 客户端的每一个连接就是一个socket对象) 2. 将数据从内核拷贝到进程中 (Copying the data from the kernel to the process.原创 2021-09-11 17:15:54 · 206 阅读 · 0 评论 -
Linux的进程间通信(IPC)
管道( pipe ):最初是半双工的,现在某些系统提供全双工管道。Linux的管道是继承Uinx的进程间通信机制。在管道的具体实现中,根据通信所使用的的文件是否具有名称,有“匿名管道”和“命名管道”。通常,一个管道由一个进程创建,然后该进程调用fork,此后父进程与子进程之间就可以使用管道通讯。这就是匿名管道。命名管道是在实际文件系统上实现的一种通信机制。由于它是一个与进程没有“血缘关系”的、真正且独立的文件,所以它可以在任意进程之间实现通信。由于命名管道不支持诸如lseek()等文件定位操作.原创 2021-09-10 15:29:21 · 147 阅读 · 0 评论 -
Linux指令——系统信息和性能查看
uname -a //查看内核/OS/CPU信息uname -r //查看内核版本uname -m //查看处理器架构arch //查看处理器架构cat /proc/version //查看Linux版本信息cat /proc/cpuinfo //查看CPU信息cat /proc/loadavg //查看系统负载uptime .原创 2021-09-10 12:08:19 · 133 阅读 · 0 评论