• 计算机操作系统的因果


    操作系统的目标:(要做什么和应该做什么)

    1、方便性:提供简易的使用计算机的方式,方便用户。

    2、有效性:提高计算机系统的资源利用率,提高系统的吞吐量,加速程序的运行。

    3、可扩充性:操作系统需要适应计算机硬件的发展和计算机应用的发展。(微内核结构)

    4、开放性:在不同硬件上提供一致的接口。

    操作系统的基本特性:

    1、并发性:操作系统引入进程的概念,并在此基础上实现并发。

    2、共享:即资源复用。资源复用是并发的要求,是并发实现的条件之一。

    3、虚拟:把一个物理实体变成多个逻辑实体。(时分复用、空分复用)

    4、异步:进程是以不可预知的速度向前推进的,但一个作业运行的结果不受影响。进程何时获得处理机和以什么样的速度进行,并不能由进程自身控制。+

    ·

    程序的执行逻辑:

    DAG derected acyclic graph 前趋图:有向无循环图

    具有前驱关系的节点必须顺序执行,没有前驱关系的节点可以并发执行。

    进程的引入:

    并发执行时,程序具有间断性、失去封闭性、不可再现性。所以引入进程,用于描述和控制程序。

    进程实体的组成:程序段、数据段、进程控制块(Process Control Block)

    进程的定义:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。(后来引入线程作为调度的基本单位)

    进程的状态:创建状态、就绪状态(分配到除CPU以外的资源)、运行状态、阻塞状态、终止状态。

    挂起原语:Suspend,激活原语:Active,阻塞原语:block,唤醒原语:wakeup。挂起不是阻塞!!

    进程控制块PCB的组成:进程标识符,处理机状态(进程的切换和继续执行),进程调度信息(状态、优先级、调度信息,阻塞事件),进程控制信息(程序和数据地址,同步和通信机制,资源清单)。

    Linux进程组:http://www.cnblogs.com/forstudy/archive/2012/04/03/2427683.html

    进程同步手段:

    1、硬件同步:关中断(不会引发调度,多处理器有问题),Test-and-Set指令,Swap指令

    2、信号量机制Semphore:整形信号量(忙等),记录型信号量(让权等待),AND型信号量(解决死锁),信号量集(PV操作的值是n)

    3、管程:一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能够同步进程和改变管程中的数据。

    设置进程的目的在于实现系统的并发性,而管程的设置则是为了解决共享资源的互斥使用的问题。管程支持条件变量,进入管程的进程可以因条件不满足而挂起并释放管程,该条件的满足会唤醒相关队列中的进程。

    进程间通信方式:

    1、共享存储器系统:Shared-Memory System 顾名思义,只能用于单机多进程。

    2、管道通信系统:管道Pipe指用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,又名pipe文件。

    3、消息传递系统:系统发送原语和共享中间实体(邮箱模式)

     4、套接字:套接字最开始的出现是为了解决端口和物理线路的多路复用问题。

    5、远程过程调用和远程方法调用

    线程的引入:

    为了减少程序在并发执行时候所付出的时空开销,使OS具有更好的并发性。当线程切换时,只需要保存和设置少量寄存器内容。

    进程的时空开销体现在:创建进程、销毁进程、进程切换。

    SMP(Symmetrical Multi-Processing)对称多处理器结构:

    https://baike.baidu.com/item/SMP%E5%AF%B9%E7%A7%B0%E5%A4%9A%E5%A4%84%E7%90%86%E7%BB%93%E6%9E%84/7213852

    https://www.ibm.com/developerworks/cn/linux/l-linux-smp/

    http://www.cnblogs.com/yubo/archive/2010/04/23/1718810.html

    线程控制块TCB的组成:

    1、线程标识符

    2、一组寄存器:包括程序计数器、状态寄存器、通用寄存器

    3、线程运行状态

    4、优先级、

    5、线程专有存储区:用于线程切换时候存放现场保存信息,和与该线程相关的统计信息。

    6、信号屏蔽????

    7、堆栈指针:保存局部变量和返回地址。(用户堆栈指针和核心堆栈指针)

    线程的实现方式:

    1、内核支持线程KST(Kernel Supported Threads)

    2、用户级线程ULT(User Level Threads)

    3、组合方式ULT/KST

    线程的终止:完成了任务或者在运行时出现异常而被强行终止。线程终止后不立即释放它所占有的资源。被终止但尚未释放资源的线程扔可以被需要他的线程调用,以使被终止线程重新恢复运行。??有什么用???有什么实际意义???

     操作系统与处理机调度

    单道批处理系统:Simple Batch Processing System

    批处理指的是处理一批多个作业,而无论是否作业之间是否并行。单道批处理系统每次只能执处理一个作业,这批作业能一个接一个地连续处理。

    多道批处理系统:Multiprogrammed Batch Processing System

    多道批处理系统通过作业调度选择若干个作业调入内存,使他们共享CPU和系统中的各种资源。

    优缺点是:资源利用率高、系统存吞吐量大、平均周转时间长(缺点)、无交互能力(缺点)

    分时系统:Time Sharing System

    分时系统是指,在一台主机上连接了多个配有显示器和键盘的中断并由此组成的系统,该系统允许多个用户同时通过自己的终端,以交互方式使用计算机,共享主机中的资源。

    实时系统:Real TIme System

    实时系统是指系统能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有的实时任务协调一致地运行。

    微机操作系统的发展:

    1、单用户单任务操作系统:MS-DOS,PC/M

    2、单用户多任务操作系统:Windows

    3、多用户多任务操作系统:Solaris OS、Linux OS

    处理机调度:

    调度的实质是一种资源分配,处理机调度是对处理机资源进行分配。

    处理机调度的层次:

    1、高级调度High Level Scheduling:长程调度、作业调度。多道批处理系统用来进行作业调度。调度周期较长。

    2、低级调度Low Level Scheduling:进程调度、短程调度。调度进程或内核级线程。多道批处理、实时、分时三类系统都有用到。调度频率最高,调度算法不能太复杂。

    3、中级调度Intermediate Scheduling:内存调度。目的是提高内存利用率和系统吞吐量。

    操作系统的存储管理 

    计算机采用多级缓存的存储结构。因为速度快的存储介质又贵又小。

    硬件存储层次:寄存器、高速缓存、内存、外存。

    逻辑存储层次:寄存器、高速缓存、主存、磁盘缓存、对换区、文件区。

    可执行存储器:

    没有找到准确的定义。可执行存储器包括寄存器和主存储器(主存)一个程序要想被操作系统所执行,必须先装入可执行存储器当中。主存和内存不是等价的,操作系统把内存分为主存和磁盘缓存,磁盘缓存充当逻辑上的磁盘,用来缓和磁盘访问速度慢的问题。这个概念对后面的理解很重要。

    寄存器大小几k左右,250个32位寄存器大小约为1k。(1000, != 1024)寄存器和cpu速度一致。

    高速缓存几十k到几M。

    磁盘缓存,内存存储介质,逻辑磁盘。

    程序的链接和装入:

    地址:数据地址和指令地址。

    绝对地址:内存的物理地址。

    1、绝对装入方式(Absolute Loading Mode) 编译或者汇编的时候把符号地址转换为绝对地址。

    2、可重定位装入方式(Relocation Loading Mode)在进程装入的时候确定绝对地址。转换的过程叫重定位。

    3、动态运行时的装入方式(Dynamic Run-time Loading)

    目的:允许程序运行时在内存中移动位置。

    装入内存后的所有地址仍然是逻辑地址。利用重定位寄存器在程序真正要执行的时候确定绝对地址。

    装入模块:一个可执行的程序(不完整的目标模块需要进行链接)。

    1、静态链接(Static Linking)程序装入前修改相对地址和调用符号。

    2、装入时动态链接(Load-time Dynamic Linking)目的:模块共享,便于修改和更新。程序装入的时候链接外部模块。

    3、运行时动态链接(Run-time Dynamic Linking)程序运行时把外部模块调入内存并链接。

    你有没有想到一个问题:操作系统是怎么装入的?

    如果操作系统需要支持静态链接和绝对装入方式以外的内存,那么它需要提供一个复杂的存储管理系统。

    存储系统需要管理进程的内存分配、为了解决内存不足的问题和提高内存资源利用率需要提供对换功能,基于具体的实现又需要提供地址变换功能。

    内存分配:

    1、单一连续分配:早期单用户、单任务操作系统。

    2、固定分区分配:早期多道程序系统。

    3、动态分区分配:有两种实现,数据结构分别是空闲分区表、空闲分区链。

    4、离散内存分配方式:分页存储管理方式、分段存储管理方式、段页试存储管理方式。所谓离散是指一个进程所分配到的内存空间是不连续的。

    连续内存分配算法的要点:1、找到一块内存分配给进程。2、紧凑内存碎片(需要使用重定位寄存器进行动态重定位)。

    分页存储管理:

    内存页:具有固定大小的一块内存。

    页地址:举例,一个32位地址,0-11位表示页内地址,12-32位表示页号,那么每页大小是2^12 = 4K ,地址空间最多允许的内存页数量是2^20 = 1M。注意:物理地址2017使用页地址表示,实际的数值依然是2017,无论页大小是多少。页地址从概念上区分了页号和页内地址,它使得:在页式结构下,地址转换只需要转换页号,而不需要考虑页内地址。

    页表(页面映像表):用于用户地址空间和内存地址空间的地址转换。页表记录了用户地址空间的页号和内存地址空间的页号之间的对应关系。一个进程可能使用多个页,这些页在内存中是离散的(物理地址),但是用户空间的页号是从0开始计数(逻辑地址)。页表和进程是对应的,一个进程对应一个页表。

    页表寄存器PTR(Page Table Register)存放页表在内存的起始地址和页表的长度。这个页表是当前执行的进程的页表。

    使用基本的地址转换功能来访问内存的过程是:通过访问内存中的页表获取页号从而得到物理地址,之后访问物理地址对应的内存。这一过程使得访问内存的时间开销扩大一倍。解决方法是使用快表。快表是一个具有并行查寻能力的特殊高速缓冲寄存器。

    使用快表时,访问内存的有效时间是Effective Access Time:EAT = 2*t + x - t*a。t是访问一次内存的时间,x是访问一次快表的时间,a是快表命中率。

    两级页表:对页表进行分页,形象的说法是把物理地址分为3部分:(外层页号、外层页内地址、页内地址)。其中外层页号+外层页内地址就是物理页号。

    多级页表:一般多级页表只做三层。例如64位操作系统会把直接寻址空间减少为45位,这种做法减小了地址空间。

    反置页表:内容和页表相反。逻辑页表的相对地址是物理页号,存储内容是进程标识符和页号。它需要每个进程提供一个外部页表进行辅助。外部页表记录了进程的未调入内存的页。

    分段存储管理方式:段的长度是不固定的。

    分页分段的区别:

    1、分页是满足系统管理需要,分段是满足用户需要。

    2、页的大小固定,段的大小由用户程序确定,大小不固定。

    3、分页的用户地址空间是一维的,分段的用户地址是二维的,用户需要给出段名和段内地址。(分页是系统行为,用户程序地址是单一线性的,用户不需要关心分页情况)

    分段系统适合信息共享。一个段是一个完整的信息,而分页的时候可能是多个页。

    可重入代码(Reentrant Code)又称为“纯代码Pure Code”,是一种允许多个进程同时访问的代码。

    段页式存储管理系统:先分段,段内分页。

    操作系统把磁盘空间分为对换区和文件区。

    对换:把内存中暂时不能运行的进程或者暂时不用的程序和数据换出到外存上。对换技术的引入原因之前说过:解决内存不足的问题和提高内存利用率(其实这两点算是一回事)。

    文件区管理目标:提高文件存储空间的利用率。

    对换区的管理目标:提高进程换进换出的速度。

    对换区是磁盘空间,但是属于逻辑内存,它的管理和内存管理相似,参考上面。

    文件的基本操作:创建文件、删除文件、读文件、写文件、设置读写位置。

    文件的打开和关闭:在内存中建立(删除)和磁盘文件的联系。

    POSIX( Protable Operating System IX)给予UNIX的可移植操作系统接口。

    TODO:

    文件系统、磁盘管理系统、操作系统接口、保护和安全。

  • 相关阅读:
    linux文件锁flock【转】
    无尽的悲伤
    go的临时对象池--sync.Pool
    golang 小知识-持续更新中
    【转】Go Channels
    Golang文件名命名规则
    Parquet存储格式
    预装的Office2016,文件图标表显示以及新建失败问题解决 方法
    Gamma编码及Delta编码概述
    java web开发环境配置系列(二)安装tomcat
  • 原文地址:https://www.cnblogs.com/afraidToForget/p/10151977.html
Copyright © 2020-2023  润新知