一.什么是操作系统

1)管理计算机软件和硬件资源的程序,是计算机的基石

2)本质是运行在计算机上的应用程序,运行在你电脑上的所有应用程序都通过操作系统来调用系统内存以及磁盘等等硬件。

3)操作系统屏蔽了硬件的复杂性

4)操作系统的内核是操作系统的核心部分,它负责系统的内存管理,硬件设备管理,文件系统的管理以及应用程序的管理。内核是连接应用程序和硬件的桥梁,决定这操作系统的稳定性。

二.系统调用

根据进程访问资源的特点,我们可以把进程在系统上的运行分为两个级别:

1. 用户态(user mode) : 用户态运行的进程或可以直接读取用户程序的数据。

2.系统态(kernel mode):可以简单的理解系统态运行的进程或程序几乎可以访问计算机的任何资源,不受限制。

我们运行的程序基本都是运行在用户态,如果我们调用操作系统提供的系统态级别的子功能咋办 呢?那就需要系统调用了!

也就是说在我们运行的用户程序中,凡是与系统态级别的资源有关的操作(如文件管理、进程控 制、内存管理等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。

这些系统调用按功能大致可分为如下几类:

设备管理。完成设备的请求或释放,以及设备启动等功能。

文件管理。完成文件的读、写、创建及删除等功能。

进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。

进程通信。完成进程之间的消息传递或信号传递等功能。

内存管理。完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。

三.进程与线程的区别

他们是什么?

进程:我们先了解程序这个概念,程序由指令和数据组成,指令会加载到CPU,数据会加载到内存,当指令运行时需要用到磁盘等,当一个程序运行时,磁盘就会将这个程序的代码加载到内存,这时就启动了一个进程。举一些简单的例子:电脑中打开任务管理器,上面的.exe就是一个进程,比如QQ,游戏,音乐。

线程:线程就是指令流,将一条一条指令交给CPU执行。

区别:

根本区别:进程是资源分配的最小单位,线程是CPU调度的最小单位

包含关系:一个进程包括了至少一个线程,进程之间拥有共享资源,如内存,线程共享进程的内存资源。

资源开销:通过包含关系可以知道,进程开销大,线程开更轻量,上下文切换开销小

影响关系:一个进程的崩溃不会导致另一个进程崩溃,而一个线程崩溃会造成进程崩溃,进程可独立运行,线程需要依靠进程运行。

从JVM的角度来理解

JVM就是一个进程,而里面的main就是主线程。可以从图中看出,一个进程包含多个线程,线程共享区域有堆和方法区(1.8以后叫元空间),线程私有区域有虚拟机栈,本地方法栈,程序计数器。进程和线程最大的区别就是进程之间相互独立不会影响,可以共享内存资源,而线程之间有自己共享区和私有区域,会相互影响,但是线程的优点就是开销小,线程就是轻量级的进程。

二.线程的五种状态(六种)

操作系统层面
1)新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread;

2)就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;
3)运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。注:就.绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;
4)阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种:
1.等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;
⒉同步阻塞―线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;
3.其他阻塞―通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时. join()等待线程终止或者超时.或者I/O处理完毕时,线程重新转入就绪状态。
5)死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

Java层面

1)NEW

2)RUNNABLE(运行状态,可运行状态,阻塞状态)

3)BLOCKED

4)WAITING

5)TIMED_WATING

6)TERMINATED

线程创建之后它将处于 NEW(新建) 状态,调用start() 方法后开始运行,线程这时候处于 READY(可运行) 状态。可运行状态的线程获得了 cpu 时间片(timeslice)后就处于 RUNNING(运行) 状态。当线程执⾏ wait() 方法之后,线程进入WAITING(等待)状态。进入等待状态的线程需要依靠 其他线程的通知才能够返回到运行状态,而TIME_WAITING(超时等待) 状态相当于在等待状态 的基础上增加了超时限制,比如通过 sleep(long millis)方法或 wait(long millis)方法可以将 Java 线程置于 TIMED_WAITING 状态。当超时时间到达后 Java 线程将会返回到 RUNNABLE 状 态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到 BLOCKED(阻塞) 状态。线程在执行行Runnable 的 run() 方法之后将会进入到TERMINATED(终止)状态。

我们可以看到两种情况下:从操作系统来看,调用wait(),sleep(),join(),IO阻塞会进入阻塞状态;从Java层面看会进入WAITING或者TIMED_WAITING状态

三.进程间的通信方式

1. 管道/匿名管道(Pipes) :用于具有亲缘关系的父子进程间或者兄弟进程之间的通信。

2. 有名管道(Names Pipes) : 匿名管道由于没有名字,只能用于亲缘关系的进程间通信。为了克服这个缺点,提出了有名管道。有名管道严格遵循先进先出(first in first out)。有名管道以磁盘文件的方式存在,可以实现本机任意两个进程通信。

3. 信号(Signal) :信号是⼀种比较复杂的通信方式,用于通知接收进程某个事件已经发生;

4. 消息队列(Message Queuing) :消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识。管道和消息队列的通信数据都是先进先出的原则。与管道(无名管道:只存在于内存中的文件;命名管道:存在于实际的磁盘介质或者文件系统)不同的是消息队列存放在内核中,只有在内核重启(即操作系统重启)或者显示地删除⼀个消息队列时,该消息队列才会被真正的删除。消息队列可以实现消息的随机查询,消息不⼀定要以先进先出的次序读取,也可以按消息的类型读取.比FIFO 更有优势。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺。

5. 信号量(Semaphores) :信号量是⼀个计数器,用于多进程对共享数据的访问,信号量的意图在于进程间同步。这种通信方式主要用于解决与同步相关的问题并避免竞争条件。

6. 共享内存(Shared memory) :使得多个进程可以访问同⼀块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。可以说这是最有用的进程间通信方式。

7. 套接字(Sockets) : 此方法主要用于在客户端和服务器之间通过网络进行通信。套接字是支持 TCP/IP 的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的⼀种约定,用套接字中的相关函数来完成通信过程。

四.线程间的同步的方式

1. 互斥量(Mutex):采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。 因为互斥对象只有⼀个,所以可以保证公共资源不会被多个线程同时访问。比如 Java中的 synchronized 关键词和各种 Lock 都是这种机制。

2. 信号量(Semphares) :它允许同⼀时刻多个线程访问同⼀资源,但是需要控制同⼀时刻访问此资源的最大线程数量

3. 事件(Event) :Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较

五.进程的调度算法

1 先到先服务(FCFS)调度算法 : 从就绪队列中选择⼀个最先进入该队列的进程为之分配资源, 使它立即执行并⼀直执行到完成或发生某事件而被阻塞放弃占用CPU 时再重新调度。

2 短作业优先(SJF)的调度算法 : 从就绪队列中选出⼀个估计运行时间最短的进程为之分配资源,使它立即执行并⼀直执行到完成或发生某事件而被阻塞放弃占用CPU 时再重新调度。

3 时间片轮转调度算法 : 时间片轮转调度是⼀种最古老,最简单,最公平且使用最广的算法, 又称 RR(Round robin)调度。每个进程被分配⼀个时间段,称作它的时间片,即该进程允许运行的时间。

4 多级反馈队列调度算法 :前面介绍的几种进程调度的算法都有⼀定的局限性。如短进程优先的调度算法,仅照顾了短进程而忽略了长进程 。多级反馈队列调度算法既能使高优先级的作业得到响应又能使短作业(进程)迅速完成。,因而它是目前被公认的⼀种较好的进程调度算法,UNIX操作系统采取的便是这种调度算法。

5 优先级调度为每个流程分配优先级,首先执行具有最高优先级的进程,依此类推。具有相同优先级的进程以 FCFS 方式执行。可以根据内存要求,时间要求或任何其他资源要求来确定优先级。

六.操作系统的内存管理主要是做什么?

操作系统的内存管理主要负责内存的分配与回收(malloc 函数:申请内存,free 函数: 释放内存),另外地址转换也就是将逻辑地址转换成相应的物理地址等功能也是操作系统内存管理做的事情。

七.常见的几种内存管理机制

简单分为连续分配管理方式非连续分配管理方式这两种。连续分配管理方式是指为⼀个用户程 序分配⼀个连续的内存空间,常见的如块式管理 。同样地,非连续分配管理方式允许⼀个程序使用的内存分布在离散或者说不相邻的内存中,常见的如页式管理和段式管理

1. 块式管理 : 将内存分为几个固定大小的块,每 个块中只包含⼀个进程。如果程序运行需要内存的话,操作系统就分配给它⼀块,如果程序运行只需要很小的空间的话,分配的这块内存很大一部分几乎被浪费了。这些在每个块中未被利用的空间,我们称之为碎片

2. 页式管理 :把主存分为大小相等且固定的一页一页的形式,页较小,相对相比于块式管理的划分力度更大,提高了内存利用率,减少了碎片。页式管理通过页表对应逻辑地址和物理地址。

3. 段式管理 : 页式管理虽然提高了内存利用率,但是页式管理其中的页实际并无任何实际意义。 段式管理把主存分为⼀段段的,每⼀段的空间又要比一页的空间小很多 。但是,最重要的是段是有实际意义的,每个段定义了⼀组逻辑信息,例如,有主程序段 MAIN、子程序段 X、数据段 D及栈段 S 等。 段式管理通过段表对应逻辑地址和物理地址。

4.段页式管理机制:段页式管理机制结合了段式管理和页式管理的优点。简单来说段页式管理机制就是把主存先分成若干段,每个段又分成若干页,也就是说段页式管理机制中段与段之间以及段的内部的都是离散的

八.快表和多级页表

快表为了解决虚拟地址到物理地址的转换速度,操作系统在页表方案基础之上引入了快表来加速虚拟地址到物理地址的转换。我们可以把快表理解为⼀种特殊的高速缓冲存储器(Cache),其中 的内容是页表的一部分或者全部内容。作为页表的 Cache,它的作用与页表相似,但是提高了访 问速率。由于采用页表做地址转换,读写内存数据时 CPU 要访问两次主存。有了快表,有时只要访问⼀次高速缓冲存储器,⼀次主存,这样可加速查找并提高指令执行速度

使用快表之后的地址转换流程:

1. 根据虚拟地址中的页号查快表

2. 如果该页在快表中直接从快表中读取相应的物理地址;

3. 如果该页不在快表中,就访问内存中的页表,再从页表中得到物理地址,同时将页表中的该映射表项添加到快表中;

4. 当快表填满后,又要登记新页时,就按照⼀定的淘汰策略淘汰掉快表中的⼀个页

多级页表:引⼊多级页表的主要目的是为了避免把全部页表⼀直放在内存占用过多空间,特别是那些根本就不需要的页表就不需要保留在内存中。多级页表属于时间换空间的典型场景

九.分页机制和分段机制的共同点和区别

1. 共同点 : 分页机制和分段机制都是为了提高内存利用率,减少内存碎片。 页和段都是离散存储的,所以两者都是离散分配内存的方式。但是,每个页和段中的内存是连续的

2. 区别 : 页的大小是固定的,由操作系统决定;而段的大小不固定,取决于我们当前运行的程 序。 分页仅仅是为了满足操作系统内存管理的需求,而段是逻辑信息的单位,在程序中可以体现为代码段,数据段,能够更好满足用户的需要。

十.逻辑(虚拟)地址和物理地址

比如在 C 语言中,指针里面存储的数值就可以理解成为内存里的⼀个地址,这个地址也就是我们说的逻辑地址,逻辑地址由操作系统决定。物理地址指的是真实物理内存中地址,更具体⼀点来说就是内存地址寄存器中的地址。物理地址是内存单元真正的地址

十一.CPU 寻址是什么?为什么需要虚拟地址空间?

现代处理器使用的是⼀种称为虚拟寻址(Virtual Addressing) 的寻址方式。使用虚拟寻址,CPU需要将虚拟地址翻译成物理地址,这样才能访问到真实的物理内存。 实际上完成虚拟地址转换为物理地址转换的硬件是 CPU 中含有⼀个被称为内存管理单元

为什么要有虚拟地址空间呢?

没有虚拟地址空间的时候,程序都是直接访问和操作的都是物理内存 。但是这样有什么问题呢?

1. 用户程序可以访问任意内存,寻址内存的每个字节,这样就很容易(有意或者无意)破坏操作系统,造成操作系统崩溃。 2. 想要同时运行多个程序特别困难,比如你想同时运行⼀个微信和⼀个 QQ 音乐都不行。为什么呢?举个简单的例子:微信在运行的时候给内存地址 1xxx 赋值后,QQ ⾳乐也同样给内存地址 1xxx 赋值,那么 QQ音乐对内存的赋值就会覆盖微信之前所赋的值,这就造成了微信这个程序就会崩溃。

十二.什么是虚拟内存

很多时候我们使用点开了很多占内存的软件,这些软件占用的内存可能已经远远超出了我们电脑本身具有的物理内存。为什么可以这样呢? 正是因为虚拟内存的存在,通过虚拟内存可以让程序可以拥有超过系统物理内存大小的可用内存空间。另外,虚拟内存为每个进程提供了一个一致的、私有的地址空间,它让每个进程产生了⼀种自己在独享主存的错觉(每个进程拥有一片连续完整的内存空间)。这样会更加有效地管理内存并减少出错

十三.局部性原理

在某个较短的时间段内,程序执行局限于某一小部分,程序访问的存储空间也局限于某个区域

局部性原理表现在以下两个方面:

1. 时间局部性 :如果程序中的某条指令⼀旦执行,不久以后该指令可能再次执行;如果某数据被访问过,不久以后该数据可能再次被访问。产生时间局部性的典型原因,是由于在程序中存在着大量的循环操作

2. 空间局部性 :⼀旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问, 即程序在⼀段时间内所访问的地址,可能集中在⼀定的范围之内,这是因为指令通常是顺序存放、顺序执行的,数据也⼀般是以向量、数组、表等形式簇聚存储的。

十四.虚拟存储器

基于局部性原理,在程序装入时,可以将程序的⼀部分装入内存,而将其他部分留在外存,就可 以启动程序执行。由于外存往往比内存大很多,所以我们运行的软件的内存大小实际上是可以比计算机系统实际的内存大小大的。在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。另⼀方面,操作系统将内存中暂时不使用的内容换到外存上,从而腾出空间存放将要调入内存的信息。这样,计算机好像为用户提供了⼀个比实际内存大的多的存储器——虚拟存储器。

十五.虚拟内存的技术实现

1. 请求分页存储管理 :建立在分页管理之上,为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能。请求分页是目前最常常的⼀种实现虚拟存储器的方法。请求分页存储管理系统中,在作业开始运行之前,仅装入当前要执行的部分段即可运行。假如在作业运行的过程中发现要访问的页面不在内存,则由处理器通知操作系统按照对应的页面置换算法将相应的页面调入到主存,同时操作系统也可以将暂时不用的页面置换到外存中。

2. 请求分段存储管理 :建立在分段存储管理之上,增加了请求调段功能、分段置换功能。请求分段储存管理方式就如同请求分页储存管理方式⼀样,在作业开始运行之前,仅装入当前要执行的部分段即可运行;在执行过程中,可使用请求调入中断动态装入要访问但又不在内存的程序段;当内存空间已满,而又需要装入新的段时,根据置换功能适当调出某个段,以便腾出空间而装入新的段。

3. 请求段页式存储管理

十六.页面置换算法

1 OPT 页面置换算法(最佳页面置换算法) :最佳(Optimal, OPT)置换算法所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。但由于人们目前无法预知进程在内存下的若千页面中哪个是未来最长时间内不再被访问的,因而该算法无法实现。⼀般作为衡量其他置换算法的方法。

2 FIFO(First In First Out) 页面置换算法(先进先出页面置换算法) : 总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面进行淘汰。

3 LRU (Least Currently Used)页面置换算法(最近最久未使用页面置换算法) :LRU算法赋予每个页面⼀个访问字段,用来记录⼀个页面自上次被访问以来所经历的时间 T,当须淘汰⼀个页面时,选择现有页面中其T值最大的,即最近最久未使用的页面予以淘汰。

4 LFU (Least Frequently Used)页面置换算法(最少使用页面置换算法) : 该置换算法选择在之前时期使用最少的页面作为淘汰页

计算机基础------操作系统相关推荐

  1. 计算机基础——操作系统

    作者简介:一名云计算网络运维人员.每天分享网络与运维的技术与干货.   座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.操作系统 1.操作系统简介 2.操作系统的主要功 ...

  2. 计算机基础——操作系统篇概览

    操作系统 1.os基础 操作系统基本概念:运行在计算机上的一种程序,管理计算机上的软件和硬件资源,包括进程,内存管理,硬件设备管理等(内核负责). 系统调用:运行在用户态的程序需要调用系统态下的资源, ...

  3. 计算机基础--操作系统基础

    学习目标: 操作系统基础 学习背景: 针对面试,对自己以往学习过的操作系统基础知识做一个记录与梳理. 学习内容: 1. 进程与线程的本质区别.以及各自的使用场景. 2. 五种进程状态之间的转换. 3. ...

  4. 快速过一遍计算机基础--操作系统—4.文件管理

    目录 Part 1:文件的逻辑结构 Part 2:文件目录 一.实现文件目录的关键数据结构----文件控制块FCB 二.目录结构 三.对文件控制块FCB的优化-索引结点 Part 3:文件的物理结构( ...

  5. 计算机基础教案(XP操作系统)

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 计算机基础教案 ...

  6. IT:银行类金融科技岗笔试习题集合—各大行(工商+建设+农业+浦发+招商+平安+人民+邮政银行)计算机信息科技岗笔试集合(包括计算机基础知识+网络+操作系统+数据库系统原理)

    IT:银行类金融科技岗笔试习题集合-各大行(工商+建设+农业+浦发+招商+平安+人民+邮政银行)计算机信息科技岗笔试集合(包括计算机基础知识+网络+操作系统+数据库系统原理) 导读:因为博主后台留言太 ...

  7. 计算机基础知识-操作系统

    1.2 操作系统 用来操作硬件,了解每一个硬件的作用并熟知其物理特性及使用方法(这是一个极其繁琐.庞大的工作). 桌面很占用系统资源 为什么要有操作系统 一般而言,现代计算机系统是一个复杂的系统.如果 ...

  8. 计算机与操作系统基础小结

    计算机基础概念 1946年二月美国,世界上第一台电子计算机ENIAC诞生,似乎从这一年开始世界便逐渐变得不一样了.随着半个世纪的时间,计算机技术蓬勃发展,推动人类进入信息社会. 计算机操作界面: ①图 ...

  9. 计算机基础和操作系统基础知识测试,计算机基础知识和操作系统.doc

    全国计算机等级考试精讲·精解·精练--二级C 第1章 计算机基础知识与操作系统 · PAGE 2· · PAGE 33· 技术资料 共享知识 第1章计算机基础知识与操作系统 大纲要求 了解计算机的有关 ...

最新文章

  1. 场景法设计测试用例atm_软件测试零基础入门:常用八大测试用例设计方法,含案例...
  2. 20行python代码的入门级小游戏-python实现石头剪刀布小游戏
  3. 摄像头夜间拍摄画面有拖影_iQOO 3延续vivo人像拍摄基因 这些技术必须了解
  4. CCIE-LAB-第十三篇-DHCP+HSRPV2+Track+DHCP Realy
  5. spanner 的前世今生
  6. Visual Studio Code for DBA的介绍
  7. Hub与Switch的帧的广播细节
  8. MATLAB简单入门
  9. longitudinal models | 纵向研究 | mixed model
  10. 全球围剿下,苹果还能挺多久?
  11. 芒果改进YOLOv5系列:原创结合Conv2Formers改进结构,Transformer 风格的卷积网络视觉基线模型,超越ConvNeXt结构
  12. 六轴多关节机器人跟四轴机器人差别在哪里呢
  13. dij最短路+堆优化
  14. 更新包与已安装应用的签名不一致
  15. 随机森林python
  16. 【分享】光纤光缆PPT
  17. 2022/1/23(每周总结)
  18. PHP构造函数construct 析构函数destruct
  19. linux sed 替换符号,linux sed 批量替换文件中的字符串或符号
  20. js--ECMAScrip

热门文章

  1. 泛型(3):泛型方法
  2. zip压缩包带有密码如何解压
  3. Host memory buffer HMB的大小
  4. 根据UI图设计的大小换算REM单位以及大屏页面全屏展示
  5. vue.runtime.esm.js?2b0e:619 [Vue warn]: Invalid component name: “__file“. Component names should con
  6. python3 - 7 Python数据类型-字符串
  7. 2018ACM暑期多校联合训练参(bao)赛(zha)记
  8. 凯文凯利著作《必然》
  9. 【每日面试】浙江农信5.10面试凉经
  10. 智慧交通引领不一样的未来出行