操作系统知识点整理

作业

用户在一次解题或一个事务处理过程中要求计算机系统所做工作的集合。它包括用户程序、所需要的数据及控制命令等。作业是由一系列有序的步骤组成的。

进程

一个程序在一个数据集合上的一次运行过程。所以一个程序在不同数据集合上运行,乃至一个程序在同样数据集合的多次运行都是不同的进程。

线程

线程是进程中的一个实体,是被系统独立调度和执行的基本单位。

进程和线程的区别

进程是程序的一次执行。线程可以理解为进程中执行的一段程序片段。
进程是独立的,这表现在内存空间、上下文环境上;线程运行在进程空间内。一般来讲(不适用特殊技术),进程无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间。
同一进程中的两段代码不能同时执行,除非引入线程。
线程是属于进程的,当进程退出是该进程所产生的线程都会被强制退出并清除。线程占用的资源要少于进程所占用的资源。进程和线程都可以有优先级。
进程间可以通过IPC通信,但线程不可以。

管程

实际上定义了一个数据结构和在改数据结构上的能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。

进行间的通信

现在最常用的进程间通信的方式有信号、信号量、消息队列、共享内存。
所谓进程通信,就是不同进程之间进行一些“接触”。这种接触有简单,也有复杂。机制不同,复杂度也不一样。通信是一个广义上的意义,不仅仅指传递一些message。它们的使用方法基本是相同的,所以只要掌握了一种使用方法,然后记住其他的使用方法就可以了。
信号和信号量是不同的,它们虽然都可用来实现同步和护士,但前者是使用信号处理器来进行的,后者是采用P、V操作来实现的。消息队列是比较高级的一种进程间通信方法,因为它真的可以在进程间传送message,连传送一个“I seek you”都可以。
一个消息队列可以被多个进程所共享(IPC就是在这个基础上进行的),如果一个进程消息太多,一个消息队列放不下,也可以用多于一个的消息队列(不过可能管理会比较复杂)。共享消息队列的进程所发送的消息中除了message本身外还有一个标志,这个标志可以指明该消息将由哪个进程护着是哪类进程接受。每一个共享消息队列的进程针对这个队列也有自己的标志,可以用来声明自己的身份。

死锁

死锁是指两个或两个以上的进程在执行过程中。因争夺资源而造成的互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁。
产生死锁的四个必要条件如下:

  • 互斥条件:一个资源每次只能被一个进程使用。
  • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  • 不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。
  • 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
    这4个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

    死锁的解除与预防方法:
    在系统设计、进程调度等方面注意如何不让这4个必要条件成立,如何确定资源的合理分配方法,避免进程永久占据系统资源。此外,也要防止进程处于等待状态的情况下占用资源,在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是都分配资源,若分配后系统可能发生死锁,则不予分配,否则予以分配。因此,对资源的分配要给予合理的规划。
    根据产生死锁的4个必要条件,只要使其中之一不能成立,死锁就不会出现。为此,可以采取下列3中预防措施:

  • 采用资源静态分配策略,破坏“部分分配”条件 。

  • 允许进程剥夺使用其他进程占有的资源,从而破坏“不可剥夺”条件。
  • 采用资源有序分配阀,破坏“环路”条件。
    这里注意一点,互斥条件不能被破坏。
    避免死锁的经典算法:银行家算法。

内存管理

Windows内存管理方式主要分为:页式管理、段式管理、段页式管理。
页式管理的基本原理是将进程的虚拟空间划分成若干个长度相等的页;页式管理把内存空间按也得大小划分成片或者页面,然后把页式虚拟地址与内存地址简历一一对应的页表;并用相应的硬件地址变换机构来解决离散地址变换问题。页式管理采用请求调页或预调页技术来实现内外存存储器的统一管理。
优点:没有外碎片,每个内碎片不超过也页的大小。
缺点:程序全部装入内存,要求有相应的硬件支持。例如地址变换机构缺页终端的产生和选择淘汰页面等都要求有相应的硬件支持。这增加了机器成本,增加了系统的开销。

段式管理的基本思想就是把程序按内容或过程函数关系分成算,每段有自己的名字。一个用户作业或进程所包含的段对应一个二维线性虚拟空间,也就是一个二维虚拟存储器。段式管理程序以段为单位分配内存,然后通过地址映射机构把算是虚拟地址转换为实际内存物理地址。
优点:可以分别编写和编译,可以针对不同类型的段采取不同的保护,可以按段为单位来进行内存共享,包括动态链接进行代码共享。
缺点:会产生碎片。

段页式管理:为了实现段页式管理,系统必须为每个作业或进程简历一张段表以管理内存分配与释放、缺段处理等。另外由于一个段又被划分成了若干页。每个段又必须建立一张页表以把段中的虚页变换成内存中的实际页面。显然与也是管理时相同,页表中也要有相应的实现缺页中断处理和页面保护等功能的表项。
段页式管理是段式管理和页式管理方案相结合,所以具有两者的优点。
但反过来说,由于管理软件的增加,复杂性和开销也就随之增加了,另外需要的硬件以及占用的内存也有所增加,使得执行速度下降。

动态链接库/静态链接库

目前以lib为后缀的库有两种,一种为静态链接库,另一种为动态链接库(DLL)的导入库。虽然静态链接库和动态链接库的导入库都是.lib文件,但是区别很大,他们实质是不一样的东西。静态库本身就包含了实际执行代码、地址符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息。
静态链接库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,它会准确地找到是哪个obj有错,即静态lib只是壳子。当我们的应用工程在使用静态链接库的时候,静态链接库要参与编译,在生成执行文件之前的链接过程中,将静态链接库的全部指令直接连接入可执行文件中,故而,在可执行文件生成以后,静态链接库.lib文件即可以弃之不用。
动态链接库(DLL)是作为共享函数库的可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个.dll文件中,该dll包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL还有助于共享数据和资源。多个应用程序可同时访问内存中单个dll副本内容。使用动态链接代替静态链接有若干优点。dll节省内存,减少交换操作,节省磁盘空间,更易于升级(不需要重链接和长编译),提供售后支持,提供扩展MFC库类的机制,支持多语言程序。
静态链接库和动态链接库都是共享代码的方式,如果采用静态链接库,lib中的指令全部被直接包含在最终生成的exe文件中了。但是若使用dll(即动态链接库),该dll不必被包含在最终的exe文件中,exe文件执行时可以“动态”地引用和卸载这个与exe独立的dll文件,静态链接库和动态链接库中还可以再包含其他的动态链接库或者静态库,而在动态链接库中还可再包含其他的动态或静态链接库。动态链接库和静态链接库的使用不同之处在于它允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位dll函数的可执行代码所需的信息。在静态链接库的使用中,链接器从静态链接库获取所有被引用的函数,并将库同代码一起放到可执行文件中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【性能优化实战】java验证码识别训练

前言 今天刚好有空,跟大家聊聊如何学好算法进大厂。 前两天一个读者和我说,他坚持刷算法题2个月,薪资翻番去了他梦寐以求的大厂,期间面字节跳动还遇到了原题…其实据我所知目前国内的大厂和一些独角兽,已经越来越效仿…

计算机网络知识整理

OSI七层 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 物理层涉及信道上传输的比特流。 数据链路层的主要任务是加强物理层传输原始比特流的功能,是指对应的网路层显现为一条无错线路。发送包把数据封装在数据帧,按顺序传送出去并处…

吸水间最低动水位标高_体验长安逸动EV460:再也不用为电动车续驶里程焦虑了...

文| 车突突车图腾出品,未经许可,谢绝转载● ● ●人们都在期待碧水蓝天,而且越来越多的消费者也开始践行环保理念,在买车时关注起了纯电动汽车。不过遗憾的是,纯电动汽车目前还没能成为主流。一方面,是因为…

java开发工具包jdk包括哪些

害怕干不过SpringBoot?莫慌,我送你套神级pdf文档 随着 Spring Boot 使用越来越广泛,Spring Boot 已经成为 Java 程序员面试的知识点,很多同学对 Spring Boot 理解不是那么深刻,经常就会被几个连环追问就给干趴下了&am…

微信计步器怎么不计步_难以关闭的微信朋友圈广告

太难关掉了。”试图关闭朋友圈广告的小曾,在对照着腾讯视频上的一个长达6分钟的视频演示之后,通过14次操作才得以关闭。这14步操作具体如下:点击“我”—点击“设置”—点击“关于微信”—点击“微信隐私保护指引”—下拉两个屏幕的面积—点击…

java开发工具有哪些

前言 Netty 是一款基于 Java 的网络编程框架,能为应用程序管理复杂的网络编程、多线程处理以及并发。Netty 隐藏了样板和底层代码,让业务逻辑保持分离,更加易于复用。使用 Netty 可以得到一个易于使用的 API,让开发人员可以专注自…

经典冒泡排序及其优化

经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似…

expdp导出 schema_记录一则expdp任务异常处理案例

在XTTS迁移测试阶段,遇到执行几个expdp的导出任务,迟迟没有返回任何信息,对应日志无任何输出。环境:AIX 6.1 Oracle 10.2.0.4现象:在XTTS迁移测试阶段,遇到执行几个expdp的导出任务,迟迟没有返…

java开发工具软件排行榜

前言: 都说学历是敲门砖,是一点都没错,即使是在重技术轻学历的互联网企业,面试官对于学历越高的程序员初印象会更好,面试也会更顺利,而大部分专科学历的程序员,除非有过硬的技术,否…

简单选择排序算法

简单选择排序思想:首先,找到数组中最小的元素,其次,将它和数组第一个元素交换位置;再次,在剩下的元素中找到最小的元素,将它与数组中的第二个元素交换。如此亡故,直到将整个数组排序…

java开发工程师工作内容怎么写

什么是分布式锁?在回答这个问题之前,我们先回答一下什么是锁。 普通的锁,即在单机多线程环境下,当多个线程需要访问同一个变量或代码片段时,被访问的变量或代码片段叫做临界区域,我们需要控制线程一个一个…

community 计算模块度_光模块深度:国内光模块企业快速崛起

一、核心观点二、发展追溯:技术是底蕴、创新是动力1 光通信发展:技术迭代加快,国产替代是前进的方向依据摩尔定律,光模块的小型化、低成本以及高速率是产品迭代的主要方向。2 竞争格局:市场集中度高,巨头地位稳固,国内厂商稳步崛起…

java开发工程师的自我评价

前言 京东到家订单中心系统业务中,无论是外部商家的订单生产,或是内部上下游系统的依赖,订单查询的调用量都非常大,造成了订单数据读多写少的情况。 我们把订单数据存储在MySQL中,但显然只通过DB来支撑大量的查询是不…

华为魔术手机拆机图解_华为P9进水不显示维修案例

看点:iPhone X原装屏与国产屏有哪些区别?看点:换7P、8P屏幕:C11和DTP和DKH的区别狮淘:华人手机维修师专属工具集合店,不锈钢拆机片5个只需9.9元!包邮山猫潮品:手机渠道直供&#xff…

java开发工程师自我介绍文本

前言 每年金三银四,金九银十之际,想进阶梦想挑战大厂的朋友层出不穷。 梦想是要有的,万一就实现了呢?且撇开大牛们不说,每年面试之时问题也层出不穷,不得不说,每年被算法绝杀的朋友也是不在少数…

面向对象技术

面向对象和面向过程的区别 出发点不同。 面向对象强调问题域的要领直接映射到对象和对象之间的接口上,是用符合常规思维的方式来处理客观世界的问题。 面向过程方法强调的则是过程的抽象化和模块化,是以过程为中心构造或处理客观世界问题的。层次逻辑…

ad09只在一定范围内查找相似对象_23、面向对象编程

目录:对象的概念类与对象面向对象编程类的定义与实例化属性访问类属性与对象属性属性查找顺序与绑定方法小结视频链接一 对象的概念”面向对象“的核心是“对象”二字,而对象的精髓在于“整合“,什么意思?所有的程序都是由”数据”…

java开发工程师转行可以做什么

前言 分布式事务主要解决分布式一致性的问题。说到底就是数据的分布式操作导致仅依靠本地事务无法保证原子性。与单机版的事务不同的是,单机是把多个命令打包成一个统一处理,分布式事务是将多个机器上执行的命令打包成一个命令统一处理。 MySQL 提供了…

atlas怎么看日志_亿级的日志治理!微服务最佳方案,ELK stack从零搭建

ELK Stack 诞生背景一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理…

Java变量类型

所有的变量在使用前必须声明。 type identifier [ value][, identifier [ value] ...] ; 格式说明:type是数据类型,identifier是变量名,可以使用逗号隔开来声明多个同类型变量。 一下列出一些变量的声明实例,有些包含了初始化过…