- 博客(24)
- 收藏
- 关注
原创 Linux操作系统之文件系统上
所以,寻址一个扇区,就是先找到哪一个柱面(Cylinder),再确定柱面内哪一个磁道(实则为磁头位置,Head),最后确定扇区(Sector),这就是CHS寻址的真实过程。文件数据都存储在“块”中,显然,还需找一个地方存储文件属性,如文件创建者,创建日期,内容大小等。所以,磁盘物理上分了很多面,但是在我们看来,逻辑上,磁盘整体是由“柱面”卷起来的。磁道:由一个个的扇区组成,每个磁道的扇区数相同,越靠近内圈的磁道,其扇区存储密度越大。文件=内容+属性,这些都是数据,即都是存放在扇区中的,而在磁盘中,是通过。
2025-06-10 21:39:02
724
原创 操作系统---死锁
产生死锁必须同时满足以下四个条件,只要其中任一条件不成立,死锁就不会发生。互斥条件。只有对必须互斥使用的资源的争抢才会导致死锁(如哲学家的筷子、打印机设备)。像内存、扬声器这样可以同时让多个进程使用的资源是不会导致死锁的(因为进程不用阻塞等待这种资源)。不剥夺条件。进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放。请求和保持条件。进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放那个。循环等待条件。
2025-05-07 15:28:21
1535
原创 操作系统---经典同步问题
本文涉及,经典同步问题:生产者-消费者问题,多生产者-多消费者问题,吸烟者问题(生产者-消费者问题的推广),读者写者问题,哲学家进餐问题。还涉及了管程的概念。
2025-04-24 21:02:13
1201
原创 操作系统---进程同步与互斥
本文涉及:同步与互斥的基本概念,进程同步,进程互斥,临界资源与临界区,互斥概念,同步机制的准则,进程互斥的实现方法,软件实现方法,单标志法,双标志法先检查,双标志法后检查,Peterson's Algorithm,硬件实现方法,中断屏蔽方法,TestAndSet指令(检查和上锁),Swap指令,信号量机制,整型信号量,记录型信号量,用信号量机制实现进程互斥、同步、前驱关系,实现进程互斥,实现进程同步,实现前驱关系
2025-04-24 16:37:08
1397
原创 操作系统---处理机调度
进程调度(低级调度),就是按照某种算法从就绪队列中选择一个进程为其分配处理机。题目举例:①:进程在操作系统内核程序临界区中不能进行调度与切换(√)②:(2012年联考真题)进程处于临界区时不能进行处理机调度(×)换言之:临界区分为了内核临界区与普通临界区。进程在OS内核程序临界区是不能进行调度与切换的,但位于普通临界区则是可以进行调度与切换的。临界资源与临界区的解释:①临界资源:一个时间段内只允许一个进程使用的资源。各进程需要互斥地访问临界资源。
2025-04-20 12:59:43
975
原创 操作系统---进程与线程简述
进程控制的主要功能是对系统中所有的进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。简单说,进程控制就是要实现进程状态的转换进程通信就是指进程之间的信息交换进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。为了保证安全,一个进程不能直接访问另一个进程的地址空间但是进程之间的信息交换又是必须实现的。
2025-04-19 12:46:53
1362
原创 操作系统---计算机系统概述
并发:指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的并行:指两个或多个事件在同一时刻同时发生操作系统的并发性是指计算机系统中“同时”运行着多个程序,这些程序宏观上看是同时运行着的,微观上看是交替运行的。操作系统就是伴随着“多道程序技术”而出的。因此,操作系统和程序并发是一起诞生的。注意:单核CPU同一时刻只能执行一个程序,各个程序只能并发地执行多核CPU同一时刻可以同时执行多个程序,多个程序可以并行执行。对于多处理器系统来说,并行中有并发,并发中有并行。
2025-04-07 11:48:02
1375
原创 Linux操作系统之基础IO
openpathname: 要打开或创建的目标文件flags: 打开文件时,可以传入多个参数选项,用下面的一个或多个常量进⾏“或”运算,构成flags参数:O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR: 读,写打开上面这三个常量,必须指定一个且只能指定一个O_CREAT: 若文件不存在,则创建它。需要使⽤mode选项,来指明新⽂件的访问权限O_APPEND: 追加写返回值:成功:新打开的文件描述符失败:-1open。
2025-04-02 18:36:00
5059
原创 Linux操作系统之进程控制
本文是进程控制详解,涉及进程创建、进程终止、进程等待与进程程序替换。从创建进程讲起,到进程终止时,理解什么叫退出码,明白exit函数与_exit函数的区别。当进程终止退出时,进程变为了僵尸进程,虽然父进程退出时会对变为僵尸进程的子进程进行资源回收与清理,但如果不会其进行主动回收,这期间内会一直占用系统资源,本文的进程等待话题就是解决这种情况的,同时在当今各种程序语言蓬勃发展之际,一个大型项目总会涉及各种编程语言,那么进程程序替换就是描述这类情况的方法。
2025-03-24 22:49:30
1263
原创 Linux操作系统之环境变量与进程地址空间
我们之前编写的程序都是单进程的,也就是这个进程内的数据与内存资源都是完全归它自己一个人所占用。导致让我们之前认为该进程所打印出来的地址也就是物理上的实际内存地址,这一观点实则是错误的。其实进程是不能直接使用物理上的内存地址的,它只能使用虚拟内存地址,然后让OS间接把虚拟地址转换为物理地址。 也就是说OS欺骗了进程,让进程始终以为自己用的就是实际物理内存地址,让进程以为自己独占整个内存!
2025-03-17 12:46:27
1696
原创 Linux操作系统之进程状态、优先级和切换与调度
一个CPU拥有一个runqueue(就绪队列),runqueue内部含有一个存放两个元素的优先级数组(prio_array_t),这两个元素是一个结构体类型,分别表示活动队列与过期队列,这两个队列的结构是一致的。active指针永远指向活动队列expired指针永远指向过期队列nr_active表示当前活动队列中的进程数,在活动队列中,这些进程就是活跃的,是时间片还没有用完,将要准备执行的。过期队列中就是过期的,是当前一个调度内时间片用完了,但本身任务还没有完全执行完的。
2025-03-10 13:03:34
1278
原创 Linux操作系统启动——前置知识预备
揭开操作系统神秘的面纱——本文从软硬件架构出发,引出了操作系统的概念,对操作系统下了个定义:是一款纯正的对软硬件设备进行管理的软件,在整个计算机中是起管理作用的,以小故事的方式来理解“管理”二字,此外还引出了进程的概念,本文只对进程作了一个简述。
2025-03-04 20:39:56
1660
原创 二叉搜索树
二叉搜索树又称二叉排序树(中序遍历是升序),它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有结点的值都小于等于根结点的值若它的右子树不为空,则右子树上所有结点的值都大于等于根结点的值它的左右子树也分别为二叉搜索树二叉搜索树中可以支持插入相等的值,也可以不支持插入相等的值,具体看使用场景定义,STL容器中的map/set/multimap/multiset系列容器底层就是二叉搜索树的变形,其中map/set不支持插入相等值,multimap/multiset支持插入相等值。
2025-01-02 21:35:09
1345
原创 C++之多态
多态,即多种形态。在面向对象的程序设计中,我们往往希望用不同的对象去调用同一函数,能产生不同的运行结果,从而实现程序的多样化。就好比日常生活中,不同的人去做同一件事,却能产生不同的效果。我们在计算机的世界里把这种特性叫做多态,这正是面向对象的三大特性之一。
2024-11-20 20:39:24
1997
原创 C++之继承(万字详解)
在面向对象中,继承(inheritance)机制是使代码可以复用的最重要的手段,它允许我们在保持原有类特性的基础上进行扩展,增加成员函数和成员变量,这样产生新的类,称派生类(也叫子类),而原有类则称基类(也叫父类)。继承体现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触了函数,可将函数看成是简单代码逻辑上的复用,而继承就是复杂类层次上(包括了函数和变量)的复用。
2024-11-11 20:44:35
1125
原创 string类的深度剖析上
对于学习string类我的看法:string是STL容器的一部分,后面各个容器的学习也大多都有string类似的影子,学好string类是后续STL的基础
2024-10-29 21:38:42
1977
原创 C++之内存管理与模板初级
C++引入模板可谓是C++历史上跨时代的意义,模板是泛型编程的基础,当本贾尼博士(Bjarne Stroustrup)提出模板概念后,C++从此一发不可收拾,自此面向对象的编程语言也逐渐被广大程序员们所接受。模板正如它的名字一样,它是一个模具,当我们对模具浇筑不同原料时,会得到不同材料但形状大小一致的实质性物体。
2024-10-25 20:59:17
1133
原创 基于类和对象2实现Date日期类(主要是日期之间的运算)
class Date// 注意为了与库中 cout 与 cin 用法一致,需在内中声明友元// 运算符重载public://日期合法性检查// 获取某年某月的天数---频繁使用置为内联//用一个静态数组存储每月具体的天数,其中闰年单独判断= 0 || year % 400 == 0))//2月并且为闰年的判断,注意闰年条件别写错return 29;else//打印// 全缺省的构造函数// 拷贝构造函数// d2(d1)
2024-10-17 12:40:08
474
原创 C++之类和对象1
在C语言中我们就已经学过用结构体去定义变量,这是属于自定义类型,比如说定义一个学生结构体,其中结构体的成员变量可能有姓名、年龄、学号、性别等,这样定义是因为学生都具备这样的属性,可以说学生这一类群体的特征是相同的,用学生结构体可以定义出多个属性相同但具体细节上不同的学生变量,可以实现编程的广泛性。于是C++在C语言的基础上引入了类的概念,类可以说是结构体的plus版本,相比于结构体有着更强大的功能,比如说,类中可以定义成员函数(类中的函数一般叫方法)。
2024-10-06 16:54:04
723
原创 C++入门基础
namesapce本质是定义出了一个域,不同的域中可以定义同名变量,且这个域与全局域是互相独立的。C++中的域有全局域,局部域,namesapce定义的域和类域,域影响的是在编译时语法查找的变量/函数/定义和声明的逻辑,有了域的出现,就能解决定义的名字重复问题。命名空间只能定义在全局,当然它可以嵌套定义。另外命名空间内的成员可以有变量/函数/自定义类型等。项⽬⼯程中多⽂件中定义的同名namespace会认为是⼀个namespace,不会冲突。
2024-10-05 19:22:41
2006
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人