内存管理
内存的基础知识
什么是内存?有何作用?
存储单元
关于存储单元有关内容在我写的组成原理笔记中有提到:[存储单元][Link 7]
几个常用数量单位&内存地址
进程运行的基本原理
指令的工作原理—操作码+若干参数(可能包含地址参数)
从X=X+1大致看一下指令的执行过程
逻辑地址&物理地址
从写程序到程序运行—编译、链接、装入
装入模块装入内存
不修改装入模块中的指令地址就直接装入内存的话:
装入的三种方式
绝对装入
静态重定位
动态重定位
链接的三种方式
静态链接
装入时动态链接
运行时动态链接
内存管理的概念
内存空间的分配与回收
内存空间的扩展(实现虚拟性)
地址转换
三种装入方式
内存保护
两种方式
覆盖与交换技术
覆盖技术
交换技术
回忆复习一下进程调度
内存的分配与回收
单一连续分配
固定分区分配
分区说明表
动态分区分配(可变分区分配)
记录内存使用的数据结构
动态分配算法
分区的分配和回收操作
如何分配?
如何回收?
内部碎片与外部碎片
...
死锁
死锁详解
什么是死锁?
死锁、饥饿、死循环的区别
死锁产生的四个必要条件
什么时候会发生死锁?
死锁的处理策略
预防死锁
破坏互斥条件
破坏不可剥夺条件
破坏请求和保持条件
破坏循环等待条件
避免死锁
什么是安全序列?
所谓安全序列
安全序列、安全状态、不安全状态、死锁之间的联系
避免系统进入不安全状态------银行家算法
使用代码实现
死锁的检测和解除
死锁的检测
举个例子,可以消除所有边,即无死锁发生
举个例子,不可消除所有边,即产生死锁
死锁的解除
进程的同步与互斥
进程的同步与互斥
进程同步
同步也称为接制约关系。
在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,如等待、传递信息等,引入了进程同步的概念。进程同步是为了解决进程的异步问题。
一个简单的例子来理解这个概念。
例如,让系统计算1 + 2x3,假设系统产生两个进程: 一个是加法进程,一个是乘法进程。要让计算结果是正确的,一定要让加法进程发生在乘法进程之后,但实际上操作系统具有异步性,若不加以制约,加法进程发生在乘法进程之前是绝对有可能的,因此要制定一定的机制去约束加法进程,让它在乘法进程完成之后才发生。
异步性:进程具有异步性的特征。异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。
进程互斥
互斥,亦称间接制约关系。进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。
在这里需复习一下临界资源的概念。
我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)都属于临 ...
window配置vscode终端为git终端
window配置vscode终端为git终端
进入文件→首选项→设置
搜索shell:windows,选择在settings.json中编辑
修改此部分
处理机的调度
处理机调度的概念和层次
调度的基本概念
调度的三个层次
高级调度( 作业调度)
中级调度(内存调度)
进程的挂起状态与七状态模型
低级调度(进程调度)
三层调度的联系和对比
进程调度的时机、切换与过程、方式
时机
什么时候进行进程调度?
什么时候不能进行进程调度?
OS内核程序临界区与普通临界区的进程调度情况
进程调度的方式
所谓进程调度方式,是指当某个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,此时应如何分配处理机。
进程的切换和过程
调度算法的评价指标
CPU利用率
系统吞吐量
周转时间
等待时间
响应时间
调度算法
先来先服务—FCFS
First come first sever
短作业优先—SJF
Shortest Job First
非抢占式—SJF
抢占式—SJF(SRTN)
注意几个细节
高响应比优先—HRRN
Highest Response Ratio Next
三种算法的对比和总结
调度算法(二)
时间片轮转—RR
Round ...
进程与线程
进程的定义
程序的概念
进程的概念
进程和程序的区别和联系:
区别:
1)进程是动态的;程序是静态的。
(2)进程有独立性,能并发执行;程序不能并发执行。
(3)二者无一一对应关系。
(4)进程异步运行,会相互制约;程序不具备此特征。
但是,进程与程序又有密切的联系: 进程不能脱离具体程序而虚设, 程序规定了相应进程所要完成的动作。
(5)组成不同。进程包含PCB、程序段、数据段。程序包含数据和指令代码。
(6)程序是一个包含了所有指令和数据的静态实体。本身除占用磁盘的存储空间外,并不占用系统如CPU、内存等运行资源。
(7)进程由程序段、数据段和PCB构成,会占用系统如CPU、内存等运行资源。
(8)一个程序可以启动多个进程来共同完成。
联系:进程不能脱离具体程序而虚设, 程序规定了相应进程所要完成的动作。
进程的定义
进程的特征
进程的组成
而其中最重要的就是进程控制块PCB(Process Control Block)
PCB简介:
PCB中记录了操作系统所需的,用于描述进程的当前情况以及控制进程运行的全部信息。
PCB的作用是使一个在多道程序环境下不能独立运 ...
操作系统概述
操作系统基本概念
操作系统的定义
操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源分配,以提供给用户和其他软件方便的接口的环境,他是计算机系统中最基本的系统软件。
操作系统的功能和目标
操作系统的功能和目标——作为系统资源的管理者
处理机管理
存储器管理
文件管理
设备管理
操作系统的功能和目标——作为用户和计算机硬件之间的接口
联机命令接口:联机命令接口=交互式命令接口
脱机命令接口:批处理命令接口
程序接口:如C:\Windows\System32\user32.dll 程序员在程序中调用user.dll(该调用过程即为系统调用)即可实现创建窗口功能。只能通过用户程序间接使用。
GUI:图形用户界面
操作系统的功能和目标——作为最接近硬件的层次
通常把覆盖了软件的机器称为扩充机器,又称为虚拟机
本节回顾
操作系统的特征
并发
操作系统的特征——并发
并发:指两个或多个时间在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的。
易混淆概念——并行:指两个或多 ...
终极C++避坑指南
本文转载自:作者:boreholehu,腾讯 WXG 后台开发工程师
原文链接
前言
C是一门古老的语言,但仍然在不间断更新中,不断引用新特性。但与此同时 C又甩不掉巨大的历史包袱,并且 C的设计初衷和理念造成了 C异常复杂,还出现了很多不合理的“缺陷”。
本文主要有 3 个目的:
总结一些 C++晦涩难懂的语法现象,解释其背后原因,作为防踩坑之用;
和一些其他的编程语言进行比较,列举它们的优劣;
发表一些我自己作为 C++程序员的看法和感受。
来自 C 语言的历史包袱
C有一个很大的历史包袱,就是 C 语言。C 语言诞生时间很早,并且它是为了编写 OS 而诞生的,语法更加底层。有人说,C 并不是针对程序员友好的语言,而是针对编译期友好的语言。有些场景在 C 语言本身可能并没有什么不合理,但放到 C当中会“爆炸”,或者说,会迅速变成一种“缺陷”,让人异常费解。
C++在演变过程中一直在吸收其他语言的优势,不断提供新的语法、工具来进行优化。但为了兼容性(不仅仅是语法的兼容,还有一些设计理念的兼容),还是会留下很多坑。
数组
数组本身其实没有什么问题,这种语法也非常常用,主要是表示 ...