操作系统原理:全局页面置换算法、工作集页置换、常驻集页置换、抖动问题

程序在运行过程中具有阶段性,可能刚开始的时候需要访问的内存很多,之后访问的内存可能会很少。如果操作系统给每个程序分配固定的物理页那么就显得不灵活,有没有办法动态地给程序分配页帧呢,在需要访问很多内存的时候多分配点页,不需要访问过多内存的时候少分配点页? 工作集模型:工作程序需要有局部性原理(邻近的代码变量分配在相邻的空间,一条指令的一次执行和下次执行都在很短的时间)。工作集是一个进程当前正在使用的逻辑页面集合。可以用 W(t,Δ) 二元式表示t时刻Δ窗口中的页面组成的...
分类: 其他 发布时间: 11-27 08:12 阅读次数: 0

Linux C : 静态链接库和动态链接库

gcc的编译过程分为三步:第一步将文件1.c 分别通过编译器解析成汇编语言第二步将文件1.s文件2.s文件3.s 分别通过汇编器 生成obj目标代码文件第三步将 这些文件通过链接器生成 out 的可执行文件 ,将多个目标代码文件合成一个文件而在第三步中链接方式有两种,一种是静态链接,另一种是动态链接。例如 A文件引用了B文件 ,所谓静态链接,就是将A和B打包进同一个最终可执行文件中。而动态链接,函数库B无需打包进可执行文件中,当A也需要引用到B时,A通过读链接...
分类: 其他 发布时间: 11-27 08:12 阅读次数: 0

Linux C : Makefile 的编写和示例

make工具是Unix/Linux 的一个编译工具,它按照顺序读取 Makefile 或 makefile ,进行自动地有选择地执行编译链接,只对影响到的修改的文件进行重新编译,不需要对整个工程进行重新编译。而Makefile中些内容的就是它的编译方式。 Makefile 的格式: 目标项 依赖项列表 [target] : file1 file2 file3 ... 规则 <tab> ...
分类: 其他 发布时间: 11-27 08:11 阅读次数: 0

操作系统原理:进程与线程、进程生命周期、线程的类型

一、进程定义 进程可以看成程序的执行过程,可以展示在当前时刻的执行状态。它是程序在一个数据集合上的一次动态执行的过程。这个数据集合通常包含存放可执行代码的代码段,存放初始化全局变量和初始化静态局部变量的数据段、用于调试的符号表、未初始化的全局变量和未初始化的静态局部变量的bss段,存放对象数据和临时变量以及数据层次结构的堆栈,系统资源等。程序是静态的,一组有序代码的集合,保存在硬盘中,进程是动态的,是程序的执行过程,执行过程结束,进程也就被结束。进程分为用户态和核心态。当进程需要在内核中进行系统...
分类: 其他 发布时间: 11-27 08:11 阅读次数: 0

Linux C : GDB调试命令汇总

GDB 是GNU的一个交互式调试工具,可以调试C、C++ 和其他几种语言编写的程序利用 gcc -g [源文件列表] -o [调试文件.x] 来生成调试文件 生成调试文件后 gdb [调试文件.x] 进入调试。命令类型 GDB命令 含义 backtrace(或bt) 查看各级函数的调用和参数 finish 运行到当前函数末尾 frame(或 f) [栈帧号] 查看栈帧情...
分类: 其他 发布时间: 11-27 08:11 阅读次数: 0

操作系统原理:调度算法和实时调度

CPU 要选择什么进程去执行,什么时候去选择新的进程?同时要求CPU尽量地充分被利用。调度算法评量指标包含:CPU利用率:CPU处于忙状态的百分比,吞吐量:单位时间内完成的进程数量,即带宽周转时间:进程的启动到结束所需的时间,包含所有等待花费的时间,等待时间:在就绪队列中的总时间响应时间:请求发出到请求开始被处理的时间。 即延迟目录一、先来先服务算法 FCFS二、短进程优先的调度算法(SPN /SJF/SRT)三、最高相应比优先(HRRN)四、...
分类: 其他 发布时间: 11-27 08:11 阅读次数: 0

操作系统原理:临界区、信号量、管程的同步和互斥

临界区:要访问(读写)的共享资源那段代码称之为临界区。这里的代码并不是指C语言等高级语言的代码,而是指机器语言的代码。 互斥:当线程处于临界区并访问共享资源时,其他线程将不会访问相同的共享资源。 锁 :对资源加上一种保护机制,使得外部程序无法进行访问。对应的反向操作称之为解锁。 死锁:两个或以上的进程,进程之间相互等待对方完成特定任务,造成等待的死循环。 饥饿:一个可执行的进程长期无法获取到CPU的使用权。 信号量:有些进程只需要访问共享资源的某个...
分类: 其他 发布时间: 11-27 08:10 阅读次数: 0

Linux C: 为什么C都必须有一个main函数

gcc的编译过程分为三步:第一步将 *.c 文件分别通过编译器解析成汇编语言 *.s 。第二步将*.s 文件分别通过汇编器生产目标文件 *.o 。第三步将 c.o文件通过链接器合成一个out 的可执行文件 。当执行.out 或者 .exe 可执行文件时,程序入口通常是main 函数,一个程序中,必须要有一个入口函数来告诉链接器指明代码从哪里开始执行。只不过大部分连接器的默认函数入口都是main函数。当然你也可以告诉链接器,入口函数是不是main...
分类: 其他 发布时间: 11-27 08:10 阅读次数: 0

操作系统原理:读写者经典同步问题

读者-写者问题的读写操作限制:写-写互斥,即不能有两个写者同时进行写操作。 读-写互斥,即不能同时有一个线程在读,而另一个线程在写。 读-读允许,即可以有一个或多个读者在读。一、读者优先当读者优先时,写文件的线程需要等读文件的线程执行完才可以执行,如果还有在读的线程则写线程需要等待。理一理读者优先的互斥关系1)当写文件的时候其他线程都不能访问,那么程序怎么知道有没有写线程在执行呢?所以需要一个信号量WriteMutex来记录允许同时写文件的线程数,即初始值(最大值)为1的信号量,同时也
分类: 其他 发布时间: 11-27 08:10 阅读次数: 0

操作系统原理:哲学家就餐经典问题

哲学家就相当于线程,叉子就相当于资源。每个线程需要获取特定的两个资源才可以执行“吃”操作。每个叉子只能被特定的两个线程访问,且访问叉子时是互斥的。假设数据结构设计一个信号量数组,5个元素代表5个叉子,每个信号量的初始值(最大值)为1 代表每个叉子只能被1个线程同时访问 ,即互斥。0号线程只能访问0号资源和1号资源,1号线程只能访问1号资源和2号资源......4号线程只能访问4号资源和0号资源。那么有人这么设计,每个哲学家先拿右边的叉子,再拿左手边的叉子。如果无法同时拿起两个叉子就释放掉自己占用的...
分类: 其他 发布时间: 11-27 08:10 阅读次数: 0

操作系统原理:死锁的特征,预防,避免,恢复

一、死锁的资源占用图循环依赖导致资源无法释放而每个线程任务都无法执行完成。其中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个释放...
分类: 其他 发布时间: 11-27 08:09 阅读次数: 0

操作系统原理:进程间通信 IPC

操作系统通信方式可以分为两种方式直接通信和间接通信,对于直接通信进程A将通知消息发送到内核中,让内核将消息发往进程B ,进程必须指明发送方或者接收方来发送/获取消息。对于间接通信进程A将通知消息发送到 内/外存中,由进程B从内/外存获取消息,发送消息方只负责把消息放到指定位置,接收方只负责在对应的位置不断地检查是否有新消息进入,从而触发事件。...
分类: 其他 发布时间: 11-27 08:09 阅读次数: 0

操作系统原理:文件系统

文件系统是一种用于持久性存储的系统抽象。硬盘属于持久性存储介质的一种。管理文件系统例如硬盘,需要管理文件块,哪一块属于哪一个文件;需要管理空闲空间和分配策略;为文件提供相应的保护,文件数据的存储需要可靠性持久性。文件的属性包含名称、文件类型(后缀)、位置、大小、读写权,创建者、创建时间,最近修改时间等 ; 文件头 保存了文件的控制信息。 文件描述符是操作系统为每个进程维护维护的一个打开文件表的索引。需要元数据来对文件进行有效的管理,元数据包括文件指针来执行最后一次读写位置,文件...
分类: 其他 发布时间: 11-27 08:09 阅读次数: 0

Linux C: 内嵌汇编语法

学内嵌汇编首先知道编译器的编译流程,内嵌汇编就是嵌套在高级程序语言中的汇编语言。在cpp 文件转成 .s 汇编文件时,只有高级程序语言会转成汇编,把qian
分类: 其他 发布时间: 11-27 08:09 阅读次数: 0

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.
分类: 其他 发布时间: 11-27 08:08 阅读次数: 0

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...
分类: 其他 发布时间: 11-27 08:08 阅读次数: 0

Linux C:文件描述符、IO重定向、恢复标准输入输出

在Linux中,文件描述符是一个非负整数的数据类型。是FILE结构体中的一个成员属性。每打开或者新建一个文件时,内核都会返回最小的且未被使用的非负整数,即文件描述符。例如,文件描述符 0,1,2,4,5...已经被该进程使用了,那么再打开一个文件返回的文件描述符就是3,再打开一个新文件就是6。如果文件描述符被关闭,那么文件描述符在下一次可能会重新被打开。 FILE结构体大致如下-----------FILE Structure---------char fbuf[SIZE...
分类: 其他 发布时间: 11-27 08:08 阅读次数: 0

Linux C:管道的实现原理,命名管道

目录一、管道二、利用管道将写进程和都进程连接起来三、命名管道一、管道在Unix/Linux 中 命令行 cmd1 | cmd2 #例如 history | grep sqlplus其中 cmd1 是 cmd2 是Linux中独立的程序 , 而 “ | ” 符号在Linux 称之为管道。管道一端用来读另一端用来写。 把前一个进程的输出结果作为后一个进程的输入参数。例如history | grep sqlplus 命令,前...
分类: 其他 发布时间: 11-27 08:08 阅读次数: 0

Linux C :线程操作和线程同步的多线程并发编程

在这之前可以先看看这边文章了解线程概念,信号量,条件变量,死锁等概念https://blog.csdn.net/superSmart_Dong/article/details/116668370 于进程相比,线程的创建和上下文切换更快。一个进程可以有多个线程,而这些线程都可以访问自身进程的所有资源。而进程的切换,则涉及到用户态转内核态的过程,原先的内存资源可能也要从外存中重新换页换回内存里。进程的创建需要重新分配内存和构建页表等相关数据结构,而线程于进程公用同一个内存空间,除了...
分类: 其他 发布时间: 11-27 08:07 阅读次数: 0

Linux C: 定时器及时钟服务

一、定时器种类对于 Intel x86有多个定时器: 1) 实时时钟 (RTC): RTC 由一个独立的小型备用电池供电。通常用于提供计算机的时间和日历信息。即使在计算机断电的情况下,RTC 还是可以独立得进行计数。在所有类Unix 系统中,时间变量是一个 long int 型,记录自1970/1/1 起经过的秒数。 2)可编程的间隔定时器(PIT) : PIT是与 CPU分离的一个定时器,以毫秒为刻度。在所有IO设备中,PIT 可以最高优先级 IRQ0 中断。PI...
分类: 其他 发布时间: 11-27 08:07 阅读次数: 0