转发小说——从HelloWorld学习操作系统

转发地址:https://my.oschina.net/hosee/blog/673628?p=%7b%7bcurrentPage+1%7d%7d

本文就将系统性的串联起那个知识点,方便复习和纪念。本文适合已经有操作系统基础的同桌,一起回想知识,本文并不详细讲解每一种算法,本文目的在于文化串联。

通过七个例证来串联全数的知识点:

写了三个C语言程序:

#include

main()
{
  puts(“Hello
World!\n”);
}

目标是愿目的在于显示器中见到Hello
World的字样。

那么在运营这些C语言程序时,操作系统做了如何呢?

1.
先是要开动程序执行,用户要报告操作系统执行顺序

哪些告知:

  • 可以鼠标双击程序
  • 命令行输入指令
  • ……

2.
操作系统知道用户的哀告之后,就会根据用户提供的公文名到磁盘上找到这一个顺序的连带音讯,找到消息之后,会去反省这些顺序是或不是2个可执行文件,如果是可执行文件,操作系统会依据程序首部音讯来明确代码和数目在可执行文件中的地点并总括出相应的磁盘块地址。

文件系统是指操作系统中联合管理音讯能源的一种软件,管理文件的贮存、检索、更新,提供安全可信的共享和护卫手段,并且有利于用户使用。

文件按性质和用途分类:普通文书,目录文件,特殊文件(设备文件),管道文件,套接字。

文本的存储介质:磁盘(包涵SSD),磁带,光盘,U盘……

物理块是音讯囤积、传输、分配的单身单位。存储设备划分为大小相等的物理块,统一号码。

一回访问磁盘的哀求:

  • 寻道:磁头移动定位到钦定磁道。
  • 旋转延迟:等待钦赐扇区从磁头下旋转经过。
  • 数量传输:数据在磁盘与内存之间的实际上传输。

SSD没有寻道和旋转延迟的小运消耗,所以速度快。

文本决定块:为管理文件而设置的数据结构,保存管理文件所需的富有有关音信。

常用属性:文件名,文件号,文件大小,文件地方,创立时间,最终修改时间,最后访问时间,爱惜,口令,成立者,当前拥有者,文件类型,共享计数,各个标志。

文件目录:统一管理每一个文件的元数据,以帮忙文件名到文件物理地址的转移。将富有文件的管制音信公司在一块,即整合文件目录。

目录文件:将文件目录以文件的花样存放在磁盘上。

目录项:构成文件目录的主导单元,目录项可以是FCB,目录是文本决定块的不变聚集。

文本的情理构造:文件在存储介质上的寄放方式。

大体结构:

1.
总是协会:文件的新闻寄存在多少三番三遍的物理块中。

   
FCB中保留文件块的开端块号和长度。

   
优点:帮助随机存取和顺序存取,所需的寻道时间和寻道次数最少,可以同时读入八个块,检索三个块很不难。

   
缺点:文件不可以动态拉长,不便利文件插入和删除,有外部碎片(紧缩技术)

2.
链接结构:2个文件的新闻寄存在多少不一连的物理块中,各块之间通过指针连接,前三个物理块指向下多少个物理块。

    FCB只须求保留开端块号

   
优点:升高了磁盘空间利用率,有利于文件的插入和删除,有利于文件动态增添。

   
缺点:存取速度慢,不适应随机存取,可靠性难题(如指针出错),越来越多的寻道次数和寻道时间,链接指针占有一定空间。

可以对链接结构进行变形:文件分配表(FAT),早期windows和U盘使用的构造。

FAT存放了颇具的链接指针,每多个物理块对应FAT的一条龙。

图片 1

0表示没事物理块,-1表示文件最终一块。

文本的开始块号保存在文件的FCB中。

3.
索引结构:三个文件的音讯寄存在若干不总是物理块中,系统为每一种文件建立贰个专用数据结构——索引表,并将那个物理块的块号存放在索引表中。

索引表就是磁盘块地址数组,其中第i个条目指向文件的第i块。

FCB中用二个字段保存索引表的任务。

图片 2

目录结构优点:保持了链接结构的长处,化解了链接结构的短处,既能顺序存取,又能随机存取,满意了文本动态增进,插入删除的必要,能丰盛利用磁盘。

缺陷:较多的寻道时间和寻道次数,索引表本人带来了系统开发。

索引表有或然很大,须要五个物理块保存,就有如拾草芥索引和汇总索引。

多级索引:

图片 3

UNIX三级索引结构:

图片 4

访问二个文件:文件名->文件目录->FCB->磁盘

狠抓文件系统质量:

磁盘调度:当有七个访盘请求等待时,选拔一定的方针,对那么些请求的劳务顺序调整安顿。下降平均磁盘服务时间,公平,高效。

磁盘调度算法:

  1. 先来先服务(FCFS),按访问请求到达的先后顺序服务。简单,公平,不过成效不高,相临五遍呼吁恐怕会造成最内到最外柱面寻道,使磁头反复移动,扩展了劳务时间,对机械不利。
  2. 最短寻道时间先行,优先挑选距当前磁头如今的访问请求进行服务,首要考虑寻道优先。改正了磁盘平均服务时间,然则造成某个访问请求长期等待得不到服务。
  3. 扫描算法(SCAN),当设备无访问请求时,磁头不动;当有访问请求时,磁头按三个主旋律移动,在活动进程中对碰到的拜会请求进行服务,然后判断该方向上是或不是还有访问请求,纵然有则持续

图片 5

  1. 单向扫描调度算法(C-SCAN),总是从0号柱面起初向里扫描,移动到达最后2个柱面后,即刻带来读写磁头赶快回到到0号柱面。裁减了新请求的最大延迟。
  2. N-step-SCAN策略,把磁盘请求队列分成长度为N的子队列,每次用SCAN处理多少个子行列,制伏“磁头臂的粘性”。
  3. FSCAN,使用八个子队列,扫描起始时,全部请求都在3个队列中,而另二个队列为空。扫描进度中,全体新到的请求都保存在另二个行列中,对新请求的服务延迟到拍卖完全数老请求之后。
  4. 旋转调度算法,依据延迟时间来决定实施顺序的调度。两种情景:1.
    多少等候访问者请求访问同一磁头上的两样扇区,2. 几何守候访问者请求访问不一致磁头上的不比编号的扇区,3. 几何等候访问者请求访问不一致磁头上独具同样的扇区。

图片 6

3.
为了举办那几个helloworld程序,操作系统会成立一个新的历程,并将该程序的可执行文件格式映射到该进程社团,表示由该进程来进行那个顺序。

进度是享有独立成效的程序关于有些数据集合上的两次运营活动,是系统进行财富分配和调度的独立单位。

PCB,进程控制块,操作系统用于管理控制进度的3个特别数据结构,进度与PCB是各种对应的。

PCB中有:

进程描述音讯:进度标识符(唯一),进程名,用户标识符,进度组关系

经过控制音信:优先级,代码执行入口地址,程序的磁盘地址,运营总括新闻(执行时间,页面调度),进程间一块和通讯,进度的行列指针,进度的新闻队列指针。

所享有的财富和运用状态:虚拟地址空间的气象,打开文件列表

CPU现场新闻:寄存器值(通用寄存器,程序计数器PC,进度情况字PSW,栈指针),指向该进程页表的指针。

进程表:所有PCB的集合。

进度情状:

图片 7

操作系统为每一类经过(就绪、等待……)建立二个或多个体系,队列成分为PCB,伴随进程情形改变,其PCB从二个队列进入另1个体系。

图片 8

进度的开创:

  • 给新进程分配1个唯一标识以及PCB
  • 为经过分配地址空间
  • 开端化PCB(设置暗中认同值,如意况为NEW……)
  • 安装相应的连串指针(如把新历程加到就绪队列链表中)

操作系统为各类进度都分配了三个地方空间。

鉴于品质,费用等考虑,引入了线程的定义。

线程的开发小,创立新线程费用的时光少,线程间切换费用时间少,线程之间相互通信无须调用内核(同一进度的线程共享内存和文件)

线程是经过中的多个周转实体,是CPU的调度单位。

4.
操作系统将控制权交给调度程序,假设调度程序选中了helloworld程序,由操作系统为该程序设置CPU上下文环境,并跳到程序初叶处,准备实施该程序。那么下3个命令周期就是举行helloworld程序了。

CPU调度:按一定的调度算法从稳妥队列中甄选3个经过,把CPU的使用权交给被接纳的历程。若是没有妥善进度,系统会安顿三个悠然进度。

CPU调度必要化解五个难题:调度算法、调度时机、调度进度。

调度算法:

占有CPU的方式:

抢占式和非抢占式

时间片轮转

  • 先来先服务(FCFS)
  • 最短作业优先(SJF)
  • 最短剩余时间优先(SQashqaiTN)
  • 参天响应比优先(HEvoque智跑N)
  • 文山会海反馈队列(Feedback)
  • 参天优先级调度
  • 滚动调度(Round
    罗布in),为短职分改革平均响应时间,各个进度分配一个时间片

图片 9

鳌头独占系统的调度算法:

图片 10

5.
当执行helloworld程序的率先条指令时,会发生缺页分外(唯有将代码和数码读入内存才能执行顺序,执行第2条指令时,还从未将代码数据读入内存,那么这些时候,硬件机制会捕获出缺页至极,并且把控制权交给操作系统)

6.
操作系统管理了统计机连串中的内存,(尽管是页式管理)操作系统会分配一页物理内存,依照前面总结出的主次的磁盘块地址,将helloworld程序从磁盘读入内存,然后继续执行helloworld程序。有的时候程序很大,一页内存不够,那么会反复发生缺页格外,然后从磁盘中读入程序到内存

笔者们早已通晓,各种进度都有自个儿的长河地址空间,并且经过要装入内存才能运转。那么如何将经过地址空间装入内存就是3个需求解决的标题。

透过下面的讲述,大家得以精晓,进度中的进度地址空间的地方,并不是最后的物理地址。

于是须求地点重一向(地址转换,从进度地址转换来物理地址)来尝试进程的加载。

我们把经过地址称为逻辑地址/相对地址/虚拟地址,而内存存储单元中的地址称为物理地址/相对地址/实地址,很强烈,唯有物理地址可以从来寻址。

地方重定位分为静态重一向和动态重平素

静态重一直:当用户程序加载到内存时,三遍性达成逻辑地址到大体地址的变换。不过须求那几个程序在内存中的地点无法更改。

动态重平昔:在先后加载到内存中,不改变地址,依然是逻辑地址。在程序执行进程当中再开展地址转换,即逐条指令执行到位更换。由MMU(内存管理单元)来加速重平昔。

今昔早就足以将次第加载到内存了,那么该怎么火速地分配内存给某些进度呢?

内存分配算法:

  • 首次适配(第二个满意)
  • 下次适配(从上次找到的空闲区往下找)
  • 一级适配(查找整个空闲区表,找到满意须要的蝇头空闲区)
  • 最差适配(总是分配满意进度须要的最大空闲区)

当内存归还后,则面临着回收难题,将左右空闲空间合并。

一种经典的内存分配方案:伙伴体系

将内存按2的幂进行划分,组成若干的悠闲块链表,查找该链表找到能满足进度需要的特级匹配块。

图片 11

大旨内存管理方案

图片 12

进程进入内存的连天区域:

单纯两次三番区,内存利用率低

定点分区,浪费空间

可变分区,剩余部分导致大批量外碎片,碎片化解方案,紧缩技术(移动程序,将享有小的空闲区合并成较大空闲区)

进程进入内存不总是区域:

页式存储管理:

经过地址空间被划分为大小相等的片段,称为页可能页面。内存地址空间按同样大小分为大小相等的一对,称为页框。

内存分配政策:以页为单位开展分配,并按进度须求的页数来分配,逻辑上相邻的页,物理上不必然相邻。

图片 13

 

图片 14

页表记录了从逻辑页号到页框号的照射关系。

每1个历程三个页表,存放在内存。页表的原初地址在有个别寄存器中。

页式存储管理中的地址转换进度:CPU取到逻辑地址,自动划分为页号和页各州址,用页号查页表,拿到页框号,再与页内地址拼接成物理地址。

段式存储管理:

用户进程地址按程序自己逻辑关系划分为多少个程序段,每一个程序段都有多少个段名。

内存空间被动态划分为不等长区域。

内存分配政策:以段为单位开展分红,每段在内存中据为己有连续空间,但各段之间可以不相邻。

图片 15

与页式差异的是,段号和段外市址无法自行划分,须求体现给出。

与页式相同,使用段表来记录关联关系。

图片 16

地址转换进度与页表也诚如:CPU取到逻辑地址后,用段号查段表,得到该段在内存中的起首地址,与段内偏移地址拼接统计出物理地址。

段页式存储管理:

用户进度按段划分,内存划分同页式存储管理

图片 17

段页式存储管理须要段表和页表

段表记录每一段的页表先河地址和页表长度。

页表与页式存储管理相同

3个历程被分为若干段,须求1个段表,而每一段依照页式存储管理分配,又对应一张页表,所以三个进程对应壹个段表和多少个页表。

总结:

图片 18

那就是说当内存不足时该怎么着管理吗?

内存“扩容”技术:内存紧缩(可变分区),覆盖技术,交流技术(将有些进度一时半刻移到外存),虚拟存储技术。

虚拟存储技术:当进度运营时,先将其部分装入内存,另一局地留在磁盘,当要执行的通令或然访问的多少不在内存中时,由操作系统自动已毕将它们从磁盘调入内存的工作。

把内存和磁盘结合起来,得到更大的“内存”,就是虚存。

虚拟存储技术和页式存储管理相结合,就生出了虚拟页式存储管理。

编造页式存储管理基本思想:

经过开头实践此前,不是装入全部页面,而是装入一个或许零个页面,之后依照进度要求,动态装入其他页面,当内存已满,而又须要装入新的页面,则依据某种算法置换内存中的某部页面,以便装入新的页面。

是因为页表数量太大,引入了系列页表。

按照古板的地方转换情势:虚拟地址->查页表->页框号->物理地址,那样各种进程都要贰个页表。页表占据了广大空中。

消除这么些标题:从情理地址出发,整个连串就确立一张页表(因为物理地址大小固定),页表项纪录进度i的某虚拟地址与页框号的投射关系。

而是依旧有二个题材存在,由于一体系页表的留存,每一趟访问页表都要去访问内存,那么须要反复拜访内存,由于CPU的通令处理速度与内存指令的访问速度差距大,CPU的进度得不到丰裕利用。

为了化解这几个题材,由于程序访问局地性原理,从而引入了快表(TLB),用来增速地点转换的速度。

快表由cache组成,访问速度快。

引入快表后的地点转换进度:

虚页号->查快表(并行比较)

假诺命中,则找到页表项

一旦没有打中,用虚页号查页表拿到页表项

当拿到页表项后看到有效位,假使可行位是1,表达该页已经在内存中,则运转

如若是0,则抛出缺页相当。

当缺页时,操作系统就要将页面调入内存,若是内存满了,必必要将部分页面目前调出到外存中。

那么置换的策略有如何呢?

  1. 拔尖页面置换算法(OPT)(置换之后依然最远的今后才会用到的页面)

  1. 先进先出算法(FIFO)
  2. 第四回机遇算法(SC牧马人)根据FIFO拔取某一页面,检查其访问位,倘诺访问位为0,则置换,如果为1,表明近来被访问过,则不置换,并将拜访位设为0
  3. 钟表算法(CLOCK)
  4. 近年未使用算法(NRU),选取如今一段时间未拔取的一页。
  5. 近年来起码使用算法(LRU),采用最后三遍访问时间距离当前时光最长的一页并交流,品质最相近OPT
  6. 最不平日采纳算法(NFU),采纳访问次数最少的沟通。

7.
helloworld程序执行puts函数(系统调用),在屏幕上写一字符串。

8.
是因为puts函数是系统调用,控制权又交给操作系统上。操作系统找到要将字符串送往的的显得设备,平常设备是由三个经过控制的,所以,操作系统将要写的字符串送给该进程。

CPU与I/O:

削减或缓解速度差异->缓冲技术

使CPU不等待I/O->异步I/O

让CPU摆脱I/O操作->DMA,通道

9.
操纵配备的经过告知设备的窗口系统它要显示字符串,窗口系统鲜明那是三个官方的操作,然后将字符串转换到像素,将像素写入设备的蕴藏印象区。

10.
视频硬件将像素转换成显示屏还是能的一组决定/数据信号。

11.
显示屏解释信号,激发液晶屏。

12.
在显示器上看看hello world。

 

从上边的历程中,我们能发现,CPU上时而运转用户程序,时而运营操作系统程序。运转操作系统程序,大家称CPU处在内核态,运行用户程序,大家称CPU处在用户态。

而那二种CPU状态之间的变换:

从用户态到内核态,只好通过暂停/卓殊/陷入进制(陷入指令是一条突出的指令,提需求用户程序的接口,用于调用操作系统的听从/服务,例如int,trap,syscall,sysenter/sysexit)

而内核态到用户态,设置程序状态字PSW.

暂停/格外机制,是操作系统的驱引力,大家得以说,操作系统是暂停驱动的。

停顿/至极的定义:CPU对系统发生的某部事件作出的反射。

CPU暂停正在进行的次第,保留现场后活动转去执行相应事件的处理程序。处理到位后回去断点,继续执行刚才被打断的顺序。

停顿和那3个的界别在于,中断是由外部引发的,而充裕则是该程序自身暴发的。

CPU几时去响应中断?CPU会在每一条指令执行最后,去扫描中断寄存器,查看是不是有停顿。若有停顿,中断硬件将该中断触发器内容按规定编码送入PSW的呼应位,称为中断码,通过查中断向量表引出中断处理程序。

除却,当然还有进程互斥同步难题。

经过互斥:由于各进度必要采纳共享财富(变量、文件等),而那一个能源需求排他性使用,各进程间竞争使用那一个能源。这一事关称为进度互斥。

经过互斥软件消除方案:

Dekker算法:

P进程:

pturn =
true;
while(qturn)
{
    if(turn == 2)
    {
       pturn = false;
       while(turn == 2);
       pturn = true;
    }
}

临界区
turn = 2;
pturn = false;

Q进程:

qturn =
true;
while(pturn)
{
    if(turn == 1)
    {
       qturn = false;
       while(turn == 1);
       qturn = true;
    }
}

临界区
turn = 2;
qturn = false;

pturn和qturn表示对应的历程想进临界区,若是都想进临界区,则经过turn来判定本身是不是要让出CPU。从而完毕互斥。

Peterson算法:

克制了Dekker算法强制轮流的弱点。

i表示经过号

进程i:
……
enter_region(i);
临界区
leave_region(i);
……

int turn;//轮到谁
int
interested[N];//兴趣数组,开始都为false,表示有些进度想进临界区
void
enter_region(int process)//若是那里三个经过的进程号是0和1
{
     int other;//表示另二个进程的长河号
     other = 1 – process;
     interested[process] = true;
     turn = process;
     while(turn == process &&
interested[other] == true);
}
void
leave_region(int process)
{
   interseted[process] = false;
}

此地的turn变量要小心一下,turn表示轮到何人来进入临界区,若是五个进度都想进去临界区,可以窥见trun变量会被后赋值的进程替换成先赋值的进程。

Peterson算法希望先想进临界区的进程先进去,那么在while循环中就暴发了判断,假设turn是近年来进度号(表示该进程是后想进入临界区的),则一向在while循环中等待,当然还索要判定另2个进程是不是想进入临界区(interested[other]==true),即使另3个进度不想进去临界区,就没须求等待了。

Peterson算法Java实现:

public class
Peterson
implements
Runnable {

private static
boolean[]
in = { false, false };
    private
static volatile int turn = -1;

public static
void
main(String[] args) {
        new Thread(new Peterson(0), “Thread – 0”).start();
        new Thread(new Peterson(1), “Thread – 1”).start();
    }

private final
int
id;

public Peterson(int i) {
        id = i;
    }

private
int other()
{
        return id == 0 ? 1 : 0;
    }

@Override
    public
void run()
{
        in[id] = true;
        turn = other();
        while (in[other()] && turn ==
other()) {
            System.out.println(“[” + id + “] –
Waiting…”);
        }
        System.out.println(“[” + id + “] – Working
(“
                + ((!in[other()]) ? “other
done” : “my
turn”) +
“)”);
        in[id] = false;
    }}

进度的一路:指系统中多个经过中发出的事件存在某种时序关系,要求相互合作,共同达成一项义务。

消除措施:

  • 信号量
  • 管程(信号量编程易出错),Java中的synchronize
  • 进度间通信IPC(由于信号量和管程只好传递少量音讯,不或者传递多量新闻,并且管程不使用与多处理器的事态),进度通讯的着力格局有1.新闻传递
    2.共享内存 3.管道 4.套接字 5.远程进程调用

理所当然还有死锁难题:

暴发死锁的须求条件:

  1. 互斥使用(能源垄断):一个能源每一趟只可以给贰个进度使用。
  2. 并吞且等待:进度在提请新的财富的同时保持对原本能源的占据。
  3. 不可抢占:财富申请者不只怕强行的从财富占有者手中夺得财富,财富只可以由占有者自愿释放。
  4. 循环等待:存在壹个进度等待队列,形成三个经过等待环路。

财富分配图:用有向图描述系统能源和进程的情事。

如:

图片 19

假使资源分配图中绝非环路,则系统中没有死锁,假使图中留存环路,能容许存在死锁。

图片 20

若果逐个能源类中只含有3个能源实例,则环路是死锁存在的尽管需要条件。

死锁预防:

  1. 毁掉“互斥使用/能源垄断”条件:能源转换技术,把垄断能源变成共享资源,SPOOLING技术的引入。
  2. 破坏“占有且等待”条件:1.亟须一次性申请全体资源,2.必须释放能源才能申请
  3. 毁掉“不可抢占”条件:通过先行级不等,可以抢占。
  4. 毁掉“循环等待”条件:财富逐步分配法,进程在提请财富时务必严峻按财富编号的一日千里次序举办,否则操作系统不予分配。

死锁避免:银行家算法,安全景况必然没有死锁发生。

银行家算法总的来说就是,给各类用户贷款的钱不会当先银行钱的总量,然而富有用户贷款的钱的总和是足以超越银行钱的总量的。

死锁检测与搞定:允许死锁发生,但是操作系统会频频监视死锁是还是不是确实发生。一旦死锁发生,就会动用专门的主意,以细小代价来排除死锁,恢复生机操作系统运转。

让大家再一次统计一下HelloWorld程序的周转。

当大家运转HelloWorld程序时,操作系统会根据文件名去找文件目录,然后找到了FCB,通过FCB里的情理地址找到磁盘上相应的文本。

那么FCB是什么样得到文件的情理地址的啊?那和文书的情理结构有关,文件的物理构造有连日社团、链表结构、索引结构,不一致结构中FCB保存的音讯不一样。

收获物理地址然后,从磁盘上读取文件需要经过寻道,旋转延迟,数据传输三有个别。那么哪些快捷地从磁盘上读取文件呢?就可以运用差别的磁盘调度算法,譬如先来先服务,最短寻道时间先行,扫描算法,旋转调度算法等等。

收获文件后,操作系统会成立1个新的进度去执行那些顺序。进度与PCB是逐一对应的,PCB中保存了经过的各项音讯,系统为种种过程分配一个地址空间,这么些地方空间是虚拟地址。

有了经过去运行那几个程序后,就等着CPU调度这些历程了。CPU调度算法有先来先服务,最短作业优先,最短剩余时间优先,最高响应比优先,轮换调度等等。

当CPU选拔调度了这一个程序,想要运营那几个顺序的第3条指令时,会发生缺页格外,因为代码数据还并未读入内存,有的时候程序很大,一页内存不够,那么会反复生出缺页分外,进度必须进入内存才能被运维,须要经过地点重向来将经过的虚拟地址转换来物理地址,分裂的内存管理方法会有两样的转移方式,比如页式存储管理,段式存储管理,段页式存储管理,加了虚拟存储技术以往,还有虚拟页式存储管理,由于应用虚拟存储技术,在内存满时,需求将一部分页面临时调到外存,置换的算法有拔尖页面置换算法,先进先出算法,如今未利用算法,如今最少使用算法等等。

如今历程被加载到了内存,该怎么高效地分配内存给那一个进度呢?内存分配算法:第三回匹配,下次同盟,最佳匹配,最差匹配。假若此刻内存满了,则会调用刚刚说的交流算法。

这儿CPU已经打响运行了这么些程序。之后须求显示的字符串将会付给突显设备的进程。最终是一名目繁多硬件上的拍卖,成功让屏幕突显HelloWorld。

 

来自 <https://my.oschina.net/hosee/blog/673628?p={{currentPage+1}}>

 

相关文章