操作系统 part2
一、程序的内存结构
运行时,程序分为:text段、data段、BSS段(2个合称数据段)、堆、栈。
text段:代码段,静态分配内存,只读。
data段:初始化的非零全局变量、静态变量。
BSS段:未初始化或者零值的全局变量、静态变量。
堆:由低地址往高地址生长,系统用链表存储,地址不连续。由程序员申请分配和释放。
栈:由高地址往低地址生长,连续的内存区域。编译器自动释放。
二、死锁
1、概念
两个或以上进程,因为抢夺资源而出现了相互等待的现象,若无外力,他们都无法继续推进下去。
2、死锁条件
- 互斥条件:一个资源只能被一个进程使用;其他进程想使用得等待。
- 请求和保持条件:一个进程因请求资源而阻塞,不会释放已有资源。
- 不可抢夺条件:进程以获得的资源,在进程结束前不能抢夺。
- 循环等待条件:若干进程之间形成了头尾相接的等待资源的关系。
3、预防策略
- 实行资源静态分配(破坏请求和保持):进程要运行必须一次性申请到所有资源。缺点:进程的资源难以预知,资源利用率低。
- 允许进程抢夺某些资源(破坏不可抢夺):当进程占有一部分资源并且申请不到新的资源的时候,必须释放已有资源。缺点:降低系统性能。
- 实行资源有序分配(破坏循环等待):对资源排序编号,进程对资源的请求必须按照资源序号递增顺序提出,也就是说只有申请到了编号小的资源才能继续申请编号大的资源。
4、避免策略
银行家算法:允许进程动态的申请资源,但在系统分配资源之前,应先计算此次分配的安全性,若分配导致不安全,则不分配。
想要分配,需要满足以下条件:
- 申请资源\(\le\)系统拥有的资源
- 申请资源\(\le\)进程需要的资源
- 满足安全性。
安全性算法:
剩下的系统资源能够满足让所有的未完成的进程都能完成,则安全。
4. Finish[ i ] = false; //进程未完成
5. Need <= Work
6. 进程执行完毕
7. Work = Work + Allocation
8. Finish [ i ] = true
9. 返回继续执行 1 ,寻找其他的进程分配资源
10. 若所有的 Finish 为 true 则安全
5、鸵鸟策略
无视死锁的发生。
原因:死锁发生的概率很低,解决死锁的代价很大。
操作系统 part2的更多相关文章
- 秋招C++面试相关总结索引
C++相关 C++ part1 C++ part2 C++ part3 C++ part4 C++ part5 C++ part6 C++ part6.5 C++ part7 C++ part8 C+ ...
- Linux内核分析——操作系统是如何工作的
万子惠 + 原创作品转载请注明出处 + <Linux内核分析> 实验部分 使用实验楼的虚拟机打开shell 然后cd mykernel 您可以看到qemu窗口输出的内容的代码mymain. ...
- [自制操作系统] BMP格式文件读取&图形界面系统框架/应用接口设计
本文将介绍在本人JOS中实现的简单图形界面应用程序接口,应用程序启动器,以及一些利用了图形界面的示例应用程序. 本文主要涉及以下部分: 内核/用户RW/RW调色板framebuffer共享区域 8bi ...
- 自动化测试 Appium之Python运行环境搭建 Part2
Appium之Python运行环境搭建 Part2 by:授客 QQ:1033553122 实践环境 参见 Appium之Python运行环境搭建 Part1 环境部署 1.安装Android SDK ...
- MySQL数据库之part2
一.索引原理与慢查询优化 一.介绍 1.为何需要有索引 一般的应用系统,读写比例是10:1左右,而且插入操作和一般的更新操作很少出现性能问题.在生产环境中,我们遇到最多的.也是最容易出问题的还是一些负 ...
- 12-Factor与云原生Part2
12-Factor与云原生Part2 12-Factor 为构建如下的 SaaS 应用提供了方法论: 使用声明式格式来搭建自动化,从而使新的开发者花费最少的学习成本加入这个项目 和底层操作系统保持简洁 ...
- 操作系统篇-调用门与特权级(CPL、DPL和RPL)
|| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 在前两篇文章(<操作系统篇-浅谈实模式与保护模式>和<操作系统篇-分段机制与GDT|LDT>)中,我们提到 ...
- 操作系统篇-分段机制与GDT|LDT
|| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 在<操作系统篇-浅谈实模式与保护模式>中提到了两种模式,我们说在操作系统中,其实大部分时间是待在保护模式中的. ...
- 操作系统篇-hello world(免系统运行程序)
|| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 今天起开始分享关于操作系统的相关知识,本人也是菜鸟一个,正处于学习阶段,这整个操作系统篇也是我边学习边总结的一些结果,希 ...
随机推荐
- 算法模板 - C++ 高精度运算
C++算法板子 高精度 高精度推荐用python来写,python有大整数,这里写的是关于C++的高精度运算模板 1.高精 * 低精 #include <iostream> #includ ...
- MySQL中UPDATE语句里SET后使用AND的执行过程和结果分析
使用SQL中的UPDATE关键字更新多个字段值时,SET后面的更新字段应该使用逗号而不能用AND.虽然用AND不会报错,但会使更新结果错误,下面我将通过场景来分析当我们使用AND时SQL的执行过程和为 ...
- 扩展:Flash消息
扩展:Flash消息 flash存值之后只能取一次 from flask import Flask,render_template,flash,get_flashed_messages,session ...
- 微信小程序 发送模板消息的功能实现
背景 - 小程序开发的过程中,绝大多数会满足微信支付 - 那么,作为友好交互的体现,自然就会考虑到支付后的消息通知咯 - 所以,我的小程序项目也要求完成这个效果,so.分享一下自己的实现步骤,以方便道 ...
- Flink的状态与容错
本文主要运行到Flink以下内容 检查点机制(CheckPoint) 状态管理器(StateBackend) 状态周期(StateTtlConfig) 关系 首先要将state和checkpoint概 ...
- Spring Security,没有看起来那么复杂(附源码)
权限管理是每个项目必备的功能,只是各自要求的复杂程度不同,简单的项目可能一个 Filter 或 Interceptor 就解决了,复杂一点的就可能会引入安全框架,如 Shiro, Spring Sec ...
- MySQL中redo log、undo log、binlog关系以及区别
MySQL中redo log.undo log.binlog关系以及区别 本文转载自:MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结 ...
- SpringBoot 报错: Circular view path [readingList] 解决办法
spring boot报错: Circular view path [readingList]: would dispatch back to the current handler URL [/re ...
- (011)每日SQL学习:SQL开窗函数
开窗函数:在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成.为了解决这些问题,在 2003 年 ISO SQL 标准加入了开窗函数,开窗函数的 ...
- (Oracle)数据库用户的密码过期时间如何修改为永不过期
Oracle的密码过期规则是用Profile来管理的,系统默认只有一个Profile(DEFAULT),该profile的密码过期规则为180天.那么如何修改Oracle数据库用户的密码过期时间为永不 ...