操作系统
文章平均质量分 80
superSmart_Dong
这个家伙很懒,啥都不想写
展开
-
C++ 线程池的实现
【代码】C++ 线程池的实现。原创 2023-08-27 21:02:51 · 384 阅读 · 0 评论 -
计算机体系结构分类和嵌入式系统
计算机体系结构,flynn分类法、嵌入式系统芯片、嵌入式系统的初始化过程原创 2023-03-05 21:50:10 · 638 阅读 · 0 评论 -
Linux Shell:用ssh命令统计分布式集群信息
统计分布式集群信息的思路、SSH加密原理、SSH命令、利用ssh-keygen和ssh-copy-id 实现免密登录、Linux Shell 脚本实现、ssh只循环一次问题原创 2022-07-22 21:54:59 · 379 阅读 · 0 评论 -
Linux C: IO库函数,文件流缓冲,变参函数
一、I/O 库函数与系统调用 在Linux 中有很多关于IO(输入输出)的库函数,其大部分都存在 stdio.h 头文件中。例如fopen,fread,fwrite,fseek,fclose , 这些都是针对文件的,这些函数分别依赖于系统调用open,read,write,lseek,close其中fopen的第二个参数”打开模式“的说明如下:r , w ,a ,+, b,t 分别表示 读、写(清空内容)、读写、追加、二进制文件、文本文件 字符串(char * ) ...原创 2021-10-10 23:44:01 · 205 阅读 · 0 评论 -
Linux C: 文件操作相关的系统调用
一、常见的文件操作相关的系统调用二、st_mode 标志宏定义 值 含义 S_IFMT 0170000 文件类型位域的位掩码 S_IFSOCK 0140000 socket套接字 S_IFLNK 0120000 symbolic link 符号链接 S_IFREG 0100000 常规文件 S_IFBLK 0060000 块设备 S_IFDIR 0040000 目录 S_IFCHR...原创 2021-10-01 17:13:10 · 594 阅读 · 0 评论 -
转:ext2文件系统详解
第一部分磁盘的物理组成磁盘的基本概念:扇区为最小的物理存储单位,每个扇区为512字节。将扇区组成一个圆,那就是柱面,柱面是分区的最小单位。第一个扇区很重要,里面有硬盘主引导记录(Masterbootrecord,MBR)及分区表,其中MBR占有446字节,分区表占有64字节。分区结构体如下的结构体如下:struct partition{ u8 drive; // 0x80 u8 head; u8 sector; u8 cylinder; u8...转载 2021-09-26 22:16:36 · 1332 阅读 · 0 评论 -
Linux C: 信号及异常和捕捉函数原理
#define SIGHUP 1 终端挂起或控制进程终止 #define SIGINT 2 终端中断(Ctrl+C 组合键) #define SIGQUIT 3 终端退出(Ctrl+\组合键) #define SIGILL 4 非法指令 #define SIGTRAP 5 debug 使用,有断点指令产生 #define SIGABRT 6 由 abort(3)发出的退出指令 #define SIGIOT 6 IOT 指令 #define原创 2021-08-19 00:32:05 · 1319 阅读 · 0 评论 -
Linux C :线程操作和线程同步的多线程并发编程
在这之前可以先看看这边文章了解线程概念,信号量,条件变量,死锁等概念https://blog.csdn.net/superSmart_Dong/article/details/116668370 于进程相比,线程的创建和上下文切换更快。一个进程可以有多个线程,而这些线程都可以访问自身进程的所有资源。而进程的切换,则涉及到用户态转内核态的过程,原先的内存资源可能也要从外存中重新换页换回内存里。进程的创建需要重新分配内存和构建页表等相关数据结构,而线程于进程公用同一个内存空间,除了...原创 2021-07-18 23:22:56 · 1109 阅读 · 2 评论 -
Linux C:管道的实现原理,命名管道
目录一、管道二、利用管道将写进程和都进程连接起来三、命名管道一、管道在Unix/Linux 中 命令行 cmd1 | cmd2 #例如 history | grep sqlplus其中 cmd1 是 cmd2 是Linux中独立的程序 , 而 “ | ” 符号在Linux 称之为管道。管道一端用来读另一端用来写。 把前一个进程的输出结果作为后一个进程的输入参数。例如history | grep sqlplus 命令,前...原创 2021-07-11 01:03:43 · 1860 阅读 · 1 评论 -
Linux C:文件描述符、IO重定向、恢复标准输入输出
在Linux中,文件描述符是一个非负整数的数据类型。是FILE结构体中的一个成员属性。每打开或者新建一个文件时,内核都会返回最小的且未被使用的非负整数,即文件描述符。例如,文件描述符 0,1,2,4,5...已经被该进程使用了,那么再打开一个文件返回的文件描述符就是3,再打开一个新文件就是6。如果文件描述符被关闭,那么文件描述符在下一次可能会重新被打开。 FILE结构体大致如下-----------FILE Structure---------char fbuf[SIZE...原创 2021-07-08 02:43:06 · 1861 阅读 · 1 评论 -
Linux C :系统调用-fork,wait,subreaper
fork():创建子进程,并返回进程id。 wait(&status):等待子进程终止。如果成功则会返回僵尸子进程的pid,status的值会是子进程的exitcode。 exit(value):进程正常退出,并返回退出值value prctl(PR_SET_CHILD_SUBREAPER):设置当前进程为subreaper进程。零、示例代码即可能的输出结果#include <stdio.h>#include <unistd...原创 2021-07-03 00:35:02 · 656 阅读 · 1 评论 -
Linux C : 进程管理实验:创建进程、上下文切换
//// Created by Administrator on 2021/6/7.//#ifndef PROCESSMANAGEMENT_TYPE_H#define PROCESSMANAGEMENT_TYPE_H#define NPROC 9#define SSIZE 1024 enum ProcStatus{ FREE=0, READY, SLEEP, ZOMBIE }; typedef str.原创 2021-06-26 22:52:20 · 436 阅读 · 3 评论 -
Linux C: 内嵌汇编语法
学内嵌汇编首先知道编译器的编译流程,内嵌汇编就是嵌套在高级程序语言中的汇编语言。在cpp 文件转成 .s 汇编文件时,只有高级程序语言会转成汇编,把qian原创 2021-06-05 18:49:05 · 1525 阅读 · 0 评论 -
操作系统原理:文件系统、磁盘调度
文件系统是一种用于持久性存储的系统抽象。硬盘属于持久性存储介质的一种。管理文件系统例如硬盘,需要管理文件块,哪一块属于哪一个文件;需要管理空闲空间和分配策略;为文件提供相应的保护,文件数据的存储需要可靠性持久性。文件的属性包含名称、文件类型(后缀)、位置、大小、读写权,创建者、创建时间,最近修改时间等 ; 文件头 保存了文件的控制信息。 文件描述符是操作系统为每个进程维护维护的一个打开文件表的索引。需要元数据来对文件进行有效的管理,元数据包括文件指针来执行最后一次读写位置,文件...原创 2021-05-31 00:14:59 · 4638 阅读 · 11 评论 -
操作系统原理:进程间通信 IPC
操作系统通信方式可以分为两种方式直接通信和间接通信,对于直接通信进程A将通知消息发送到内核中,让内核将消息发往进程B ,进程必须指明发送方或者接收方来发送/获取消息。对于间接通信进程A将通知消息发送到 内/外存中,由进程B从内/外存获取消息,发送消息方只负责把消息放到指定位置,接收方只负责在对应的位置不断地检查是否有新消息进入,从而触发事件。...原创 2021-05-23 16:26:21 · 472 阅读 · 2 评论 -
操作系统原理:死锁的特征,预防,避免,恢复
一、死锁的资源占用图循环依赖导致资源无法释放而每个线程任务都无法执行完成。其中R表示资源集合,P表示进程/线程 ,每个点表示资源数,箭头表示请求和占用。图 1)P1 依赖于 R1,而R1的剩余资源需要P2释放....用图来表示 P1->R1;R1->P2;P2->R3;P3->R2;R2->{P1,P2}; 这就有一个循环依赖的环; P1->P2,P2->P3 即 P1->P3 。由于P3依赖于P1和P2的其中1个释放...原创 2021-05-19 23:34:08 · 1263 阅读 · 0 评论 -
操作系统原理:哲学家就餐经典问题
哲学家就相当于线程,叉子就相当于资源。每个线程需要获取特定的两个资源才可以执行“吃”操作。每个叉子只能被特定的两个线程访问,且访问叉子时是互斥的。假设数据结构设计一个信号量数组,5个元素代表5个叉子,每个信号量的初始值(最大值)为1 代表每个叉子只能被1个线程同时访问 ,即互斥。0号线程只能访问0号资源和1号资源,1号线程只能访问1号资源和2号资源......4号线程只能访问4号资源和0号资源。那么有人这么设计,每个哲学家先拿右边的叉子,再拿左手边的叉子。如果无法同时拿起两个叉子就释放掉自己占用的...原创 2021-05-18 00:59:42 · 1403 阅读 · 0 评论 -
操作系统原理:读写者经典同步问题
读者-写者问题的读写操作限制:写-写互斥,即不能有两个写者同时进行写操作。 读-写互斥,即不能同时有一个线程在读,而另一个线程在写。 读-读允许,即可以有一个或多个读者在读。一、读者优先当读者优先时,写文件的线程需要等读文件的线程执行完才可以执行,如果还有在读的线程则写线程需要等待。理一理读者优先的互斥关系1)当写文件的时候其他线程都不能访问,那么程序怎么知道有没有写线程在执行呢?所以需要一个信号量WriteMutex来记录允许同时写文件的线程数,即初始值(最大值)为1的信号量,同时也原创 2021-05-17 01:33:38 · 1297 阅读 · 0 评论 -
Linux C: 为什么C都必须有一个main函数
gcc的编译过程分为三步:第一步将 *.c 文件分别通过编译器解析成汇编语言 *.s 。第二步将*.s 文件分别通过汇编器生产目标文件 *.o 。第三步将 c.o文件通过链接器合成一个out 的可执行文件 。当执行.out 或者 .exe 可执行文件时,程序入口通常是main 函数,一个程序中,必须要有一个入口函数来告诉链接器指明代码从哪里开始执行。只不过大部分连接器的默认函数入口都是main函数。当然你也可以告诉链接器,入口函数是不是main...原创 2021-05-16 15:43:43 · 837 阅读 · 0 评论 -
操作系统原理:临界区、信号量、管程的同步和互斥
临界区:要访问(读写)的共享资源那段代码称之为临界区。这里的代码并不是指C语言等高级语言的代码,而是指机器语言的代码。 互斥:当线程处于临界区并访问共享资源时,其他线程将不会访问相同的共享资源。 锁 :对资源加上一种保护机制,使得外部程序无法进行访问。对应的反向操作称之为解锁。 死锁:两个或以上的进程,进程之间相互等待对方完成特定任务,造成等待的死循环。 饥饿:一个可执行的进程长期无法获取到CPU的使用权。 信号量:有些进程只需要访问共享资源的某个...原创 2021-05-14 01:59:39 · 1848 阅读 · 0 评论 -
操作系统原理:调度算法和实时调度
CPU 要选择什么进程去执行,什么时候去选择新的进程?同时要求CPU尽量地充分被利用。调度算法评量指标包含:CPU利用率:CPU处于忙状态的百分比,吞吐量:单位时间内完成的进程数量,即带宽周转时间:进程的启动到结束所需的时间,包含所有等待花费的时间,等待时间:在就绪队列中的总时间响应时间:请求发出到请求开始被处理的时间。 即延迟目录一、先来先服务算法 FCFS二、短进程优先的调度算法(SPN /SJF/SRT)三、最高相应比优先(HRRN)四、...原创 2021-05-11 00:14:59 · 3341 阅读 · 1 评论 -
操作系统原理:进程与线程、进程生命周期、线程的类型
一、进程定义 进程可以看成程序的执行过程,可以展示在当前时刻的执行状态。它是程序在一个数据集合上的一次动态执行的过程。这个数据集合通常包含存放可执行代码的代码段,存放初始化全局变量和初始化静态局部变量的数据段、用于调试的符号表、未初始化的全局变量和未初始化的静态局部变量的bss段,存放对象数据和临时变量以及数据层次结构的堆栈,系统资源等。程序是静态的,一组有序代码的集合,保存在硬盘中,进程是动态的,是程序的执行过程,执行过程结束,进程也就被结束。进程分为用户态和核心态。当进程需要在内核中进行系统...原创 2021-05-07 00:08:15 · 1012 阅读 · 0 评论 -
Linux C : 静态链接库和动态链接库
gcc的编译过程分为三步:第一步将文件1.c 分别通过编译器解析成汇编语言第二步将文件1.s文件2.s文件3.s 分别通过汇编器 生成obj目标代码文件第三步将 这些文件通过链接器生成 out 的可执行文件 ,将多个目标代码文件合成一个文件而在第三步中链接方式有两种,一种是静态链接,另一种是动态链接。例如 A文件引用了B文件 ,所谓静态链接,就是将A和B打包进同一个最终可执行文件中。而动态链接,函数库B无需打包进可执行文件中,当A也需要引用到B时,A通过读链接...原创 2021-05-02 15:10:19 · 329 阅读 · 0 评论 -
操作系统原理:全局页面置换算法、工作集页置换、常驻集页置换、抖动问题
程序在运行过程中具有阶段性,可能刚开始的时候需要访问的内存很多,之后访问的内存可能会很少。如果操作系统给每个程序分配固定的物理页那么就显得不灵活,有没有办法动态地给程序分配页帧呢,在需要访问很多内存的时候多分配点页,不需要访问过多内存的时候少分配点页? 工作集模型:工作程序需要有局部性原理(邻近的代码变量分配在相邻的空间,一条指令的一次执行和下次执行都在很短的时间)。工作集是一个进程当前正在使用的逻辑页面集合。可以用 W(t,Δ) 二元式表示t时刻Δ窗口中的页面组成的...原创 2021-05-01 14:34:58 · 3072 阅读 · 0 评论 -
操作系统原理:页置换算法,FIFO,LRU,Clock,LFU,二次机会法
在虚存管理中。当发生缺页中断时,进行页面的换入操作。对于一些不能够被换出的内存,通常采用页面锁定的方式,在页表中添加锁定标志位(lock bit)以区分该页是否是常驻内存。当内存满需要换出时,为了减少缺页频率通常由几种页面置换算法。例如、最优页面置换算法、先进先出算法、最近最久未使用算法、时钟页面置换算法、二次机会法等。目录一、最优页面置换算法二、先进先出算法(FIFO)三、最近最久未使用方法(LRU)四、时钟页面置换算法。(Clock)五、二次机会法六、最不常用法(...原创 2021-04-29 23:35:50 · 5476 阅读 · 1 评论 -
操作系统原理:覆盖技术、交换技术、虚拟内存概要
随着时间的推移,程序不断地更新,规模不断增长,运行的时候可能会发现内存会越来越不够用。所以希望一个容量大,更快,更便宜,数据不易丢失的原创 2021-04-27 00:06:57 · 4712 阅读 · 1 评论 -
Linux C :C的汇编码生成
想知道一段C语言写的代码对应生成的汇编语言代码是什么?1)一些基本的编码过程原理2)需要了解常用的寄存器有哪些,专门来做哪些事3)C语言对应的代码堆栈情况C的汇编代码是一个或多个cpp文件通过编译器处理而成的,而一个编译器通常要通过词法分析,语法分析,语义分析才能够生成汇编代码。以gcc为例,一个cpp文件同通过编译器生成汇编代码(*.s)文件,再通过汇编器生成出机器能够识别的指令代码(*.o)文件,最后同通过链接器,将多个指令文件合成一个大指令文件(*.out) 供机器去执行。...原创 2021-04-22 23:14:41 · 1453 阅读 · 0 评论 -
操作系统原理 : 非连续的内存分配,分段,页表
非连续的内存分配通常,分段和分页两种方式由于连续的内存分配方式存在碎片问题。非连续的内存分配就可以充分利用内存碎片,主要存在的问题就是开销,如果碎片多寻址效率会比较慢。目录一、分段二、分页机制三、页表四、二级页表和多级页表五、反向页表一、分段1)分段地址空间数据是由段存储,根据应用执行的特点可以将段进行分类:例如文件头,代码段、数据段、符号表、堆、栈等。采用分段管理方式,就是将段进行分类区分管理。2)分段寻址方法分段寻址方法即根据逻辑地址空间映..原创 2021-04-19 00:57:44 · 1108 阅读 · 0 评论 -
操作系统原理:连续的内存分配
一、由于内存释放导致的内存碎片的问题空闲内存碎片化可能导致很多的内存不会被利用。内存碎片包含两种,一种时内部碎片,一种时外部碎片,所谓的内部碎片,就是分配给应用程序使用但是实际却无法被利用的碎片,而外部碎片是在分配单元里的未使用内存。当程序从硬盘加载到内存中的时候就需要一串比较长的连续内存空间。因此,操作系统需要管理内存空间二、分区的动态分配假如由三块可用的内存空间,1K ,2K ,500B。假如需要分配一个400B内存空间给程序1)内存空间的分配策略——首次适配所谓的首次适配,..原创 2021-04-18 14:54:16 · 451 阅读 · 0 评论 -
操作系统原理: 计算机的体系结构、内存的层次结构 、地址的生成
操作系统需要完成抽象逻辑地址空间,保护独立地址空间,提供可以访问共享的内存空间,还需要根据程序运行场景虚拟出更多的地址空间这4步。在操作系统中管理内存的方法包括:程序重定位、分段、分页、虚拟内存、按需分页虚拟内存等。一、地址空间 和地址的生成地址空间分为两种,一种是物理地址空间,它的地址空间和内存条代表的主存,硬盘代表的外村是直接映射的关系。第二种是逻辑地址空间,指的是应用程序所能看到的地址空间,它是一维的,由十六位数字表示。所有逻辑地址空间都会落实在一个物理地址空间上,这个...原创 2021-04-18 14:05:57 · 533 阅读 · 0 评论 -
操作系统原理:中断,异常,系统调用
系统调用(system call):为应用程序请求操作提供服务。可异步和同步,对于返回值,同步会等待值返回再执行下一步,异步发出系统调用请求后,紧接着就会执行下一步操作。异常 (Exception): 应用程序产生的,在执行过程中发生非法的指令,破坏其他程序的处理状态。异常是同步的中断 (interrupt;): 来源于外设,是异步的,外设不清楚什么时候中断会发生。中断时持续的。当发生中断时,硬件和软件需要分别做一些事情对于硬件来讲,发生中断时要设置中断标记,当CPU知道了外设产..原创 2021-04-17 23:12:57 · 452 阅读 · 0 评论 -
Linux C :Linux 下第一个C程序
我首先用QQ管家下载VMware Workstation中的虚拟机,然后下载Ubuntu64的映像,开启了Linux之路。 搞了些设置后,成功启动Linux ,添加自身Window 和 虚拟机上Linux的共享目录方便传文件。再添加些软链接(快捷方式)来方便访问文件夹。 一般刚开始用VIM 编辑本文,操作起来比较不方便。所以一般现在Window上编辑好,然后将文本复制到Linux中。 首先创建 .c的文件在此下编辑 ,我的时helloworld.c...原创 2021-04-16 21:54:16 · 499 阅读 · 0 评论 -
操作系统原理:操作系统的启动 中断/异常/系统调用
操作系统的存储刚开始并不是内存里,而是先放在硬盘DIsk上 。由BIOS(基本输入输出系统)提供支持。开机时,BIOS首先检查外设,检查完没问题。再加载相应的软件。Bootloader: 这个程序的作用就是将 操作系统从硬盘加载到内存中。 BIOS 预先占用了系统内存从640kb开始到1M 。内存地址可以表示成 CS:IP 其中CS 是段寄存器,IP是指令寄存器 ,这两个寄存器的组合就可以指定成具体的内存地址。以X86 为例,BIOS启动的开始地址为 CS:IP =0xf000:fff...原创 2021-04-16 21:23:22 · 297 阅读 · 0 评论 -
操作系统原理: 操作系统概述
操作系统(OS)是一个系统软件,它处于硬件之上,应用软件之下。其层次架构在硬件和应用软件之间。操作系统完成对硬件的访问和控制,它有外壳(shell)对外部提供服务,和内核(Kernel)对硬件和硬件资源管理提供服务。硬件管理主要包括:CPU,进程,线程,物理内存,虚拟内存,文件系统管理、设备驱动和中断处理 等。OS的Kernel特征:1)并发:一段时间内可以存在多个运行的程序2)共享:可以给多个程序访问,并行互斥处理规则。3)虚拟:让每个用户觉得有一个计算机专门为它服务。4)异步原创 2021-04-16 01:15:20 · 645 阅读 · 0 评论