1.进程和线程以及他们的区别

2.进程间通信的几种方式

3.线程同步的方式

4.死锁

5.分页和分段有什么区别?(内存管理)

6.操作系统中进程调度的策略有哪几种?

7.页面置换算法:

8.系统颠簸

9.程序局部性原理

1.进程和线程以及他们的区别

*进程是对运行时程序的封装,是系统进行资源调度和分配的基本单位,实现了操作系统的并发

*线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发

*一个程序至少一个进程,一个进程至少一个线程,线程依赖于进程而存在

*进程拥有独立的内存单元,而线程共享进程的内存单元

2.进程间通信的几种方式

*管道以及命名管道:管道用于具有父子关系的进程通信,有名管道无论两个进程间有没有关系,都可以通信

*信号:用于通知接收进程某个事情已经发生

*消息队列:消息的链接表,克服了上面两种方式中信号量有限的缺点,对消息队列具有写权限的进程可以按照一定的规则向消息队列中添加消息,对消息队列具有读权限的进程可以从消息队列中读取信息

*共享内存:进程间最有用的通信方式,需要同步方式,比如互斥锁和信号量等

*信号量:进程间或同一进程不同线程间同步和互斥的手段

*套接字:应用于网络中的一般进程间的通信方式

3.线程同步的方式

1)互斥量(Synchronized/Lock):互斥对象机制

2)信号量:运行同一时刻同一线程访问同一资源,但是要控制同一时刻访问此资源的最大线程数量

3)时间(信号)(Wait/Notify):通过通知操作来保持多线程同步,还可以方便的实现多线程优先级的比较操作

4.死锁

1)死锁产生的四个必要条件

*互斥

*占用并等待

*非抢占:不能抢占,只能自愿释放

*循环等待

2)死锁的基本处理策略

2.1)死锁预防:打破死锁四个必要条件中的一个就可以了

*打破互斥条件:允许进程同时访问某些资源,但是某些资源因为自身属性问题,不能被同时访问,所以这种方法实用性不大

*打破占用并等待条件:可以实行资源先分配策略(进程在运行前一次性向系统申请它需要的全部资源,若所需全部资源得不到满足,则不分配任何资源,此进程暂不运行,只有当系统能满足当前线程所需全部资源时,才一次性将所需资源全部分配给该进程)或者只允许进程在没有占用资源时间才允许申请资源(一个进程可以申请一些资源并使用他们,但是在当前进程申请更多资源之前,它必须全部释放当前所占用的资源,但是这种策略也存在一些缺点:很多情况下,无法预知一个进程所需要的全部资源,因为进程是动态运行的,不可预知,同时会降低资源的利用效率,降低进程的并发性

*打破非抢占条件:允许某个进程在资源得不到满足时强行从其他进程那里获取资源,实现起来困难,会降低系统性能

*打破循环等待条件:实行资源有序分配策略,对所有资源排序编号,所有进程对资源的请求必须严格按照资源序号递增的顺序提出,即只有占用了小号资源才能占用大号资源,这样就不产生回环路,预防死锁

2.2)死锁避免:动态的检测资源分配状态,以确保循环等待条件不成立,从而确保系统处于安全状态

安全状态:存在安全序列,使得系统处于安全状态

比如银行家算法和资源分配图算法

2.3)死锁解除:进程终止和资源抢占

所谓进程终止是指简单的终止一个或者多个进程以打破循环等待,包括:终止所有死锁进程和一次只终止一个进程直到死锁消失

所谓资源抢占是指从一个或多个死锁进程那里抢占一个或多个资源

这个时候必须考虑三个问题:

*选择一个牺牲品

*回滚到安全状态

*饥饿(在代价因素中加上回滚次数,回滚得越多则越不可能继续作为牺牲品,避免一个进程总是被回滚)

5.分页和分段有什么区别?(内存管理)

段式储存管理是一种符合用户视角的内存分配管理方案,在段式储存管理中,将程序地址空间划分为若干段,比如代码段,数据段,这样每一个进程有一个二维空间地址空间,相互独立,互不干扰,段式管理的优点是:没有内存碎片(因为段大小可变,改变段来消除内碎片),但段换入换出时,会产生外碎片(比如4K的段换5K的段,会产生1K的外碎片)

页式储存管理方案用户视角和物理内存相分离的内存分配管理方案,在页式存储中,将程序逻辑地址划分为固定大小的页,而物理内存划分为同样大小的帧,程序加载时,可以将任意一页放入内存中任意一帧,这些帧不必连续,从而实现了离散分离,页式存储管理的优点是:没有外碎片,因为页的大小固定,但会产生内碎片(一个页可能填充不满)

两者的不同点:

目的不同:分页是由于系统管理的需要而不是用户的需要,它是物理信息的单位,分段的目的是为了能够更好的用户的需要,它是信息的逻辑单位,它含有一组意义相对完整的信息

大小不同:页的大小固定且由系统决定,段的长度不固定,大小由其功能决定

地址空间不同:段向用户提供二维地址空间,页向用户提供一维地址空间

信息共享:段是信息的逻辑单位,便于储存保护和信息共享,页的信息保护和共享收到限制

内存碎片:页式没有外碎片,但是有内碎片,段式有内碎片,但是没有外碎片

6.操作系统中进程调度的策略有哪几种?

1)FCFS(先来先服务,队列实现,非抢占):先请求CPU的进程先分配CPU

2)SJF(最短作业优先调度算法):平均等待时间最短的优先

3)优先级调度算法(可以是抢占的,也可以是非抢占的):优先级越高越先分配到CPU,相同优先级先到先服务,存在的主要问题:低优先级进程无穷等待CPU,会导致无穷阻塞或饥饿,解决方案:老化

4)时间片轮转调度算法(可抢占)

5)多级队列调度算法:将就绪队列分成多个独立队列,每个队列都有自己的调度算法,队列之间采用固定优先级抢占调度,其中,一个进程根据自身属性被永久的分配到一个队列中

6)多级反馈队列调度算法:与多级队列调度算法相比,其允许进程在队列之间移动,若进程过多使用CPU时间,那么它会被转移到更低优先级的队列,在较低优先级队列等待时间过长的进程会被转移到更高的优先级,以防止饥饿发生

7.页面置换算法:

1)FIFO(先进先出算法)

2)LRU(最近最少使用算法)

3)LFU(最少使用次数算法)

4)OPT(最优置换算法):理论的最优,理论:保证被置换出去等待是不再被使用的页,或者是在实际内存中使用最晚的页

8.系统颠簸:频繁的页面调度行为,因为不断产生缺页中断,导致不断要调入页调出页

解决方案:

1)替换合适的页面调度算法

2)因为运行的程度太多,造成程序无法同时将所有频繁访问的页面调入内存,则要降低多道程序的数量

3)终止该进程或者增加物理内存容量

9.程序局部性原理

空间上的局部性:内存中被访问的页的周围的页页很有可能被访问

时间上的局部性:最近被访问的页在不久的将来还会被访问

JAVA 后台面试之操作系统问题集锦的更多相关文章

  1. java后台面试之计算机网络问题集锦

    1.http和https的区别 2.对称加密和非对称加密 3.三次握手与四次挥手的流程 4.为什么TCP需要三次握手?两次不可以吗?为什么 5.为什么TCP挥手需要四次?三次不行吗? 6.TCP协议如 ...

  2. Java后台面试 常见问题

    Java后台面试 常见问题   从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米.百度.阿里.京东.新浪.CVTE.乐视家的研发岗offer.我找的是java后台开发,把常见的问题分享 ...

  3. Java后台面试记录

    腾讯一面: 总结:考基础和代码(网址A是不是网址B的子域) + SQL(选出重复邮箱)(以下是没回答上来的) 逻辑回归公式(简历上写了协同过滤) 详见:https://blog.csdn.net/ma ...

  4. java后台面试知识点总结

    本文主要记录在准备面试过程中遇到的一些基本知识点(持续更新) 一.Java基础知识 1.抽象类和接口的区别 接口和抽象类中都可以定义变量,但是接口中定义的必须是公共的.静态的.Final的,抽象类中的 ...

  5. Java后台-面试问题汇总(转载)

    总结这些天面试Java开发过程中的大多数问题,综合分类有Java基础,框架,多线程,网络通信,Linux,数据库,设计模式,算法,缓存等几个模块,由于问题太多,下面先列出问题,之后有时间在写文章解答, ...

  6. Java后台面试之java基础

    经典类概念性问题 1.java支持的数据类型有哪些?什么是自动拆装箱? 12.Java有哪些特性,举个多态的例子. 14.请列举你所知道的Object类的方法. 15.重载和重写的区别?相同参数不同返 ...

  7. java后台常见问题

    Java后台面试 常见问题 Nginx负载均衡 轮询.轮询是默认的,每一个请求按顺序逐一分配到不同的后端服务器,如果后端服务器down掉了,则能自动剔除 ip_hash.个请求按访问IP的hash结果 ...

  8. Java后台工程师面试杂记——不跳不涨工资星人跳槽经历

    经过接近一个月的时间,完成换工作这件“小事”,前后总计面试了多家公司,最后也没接到几个offer,不过最终总算尘埃落定,就对这个过程进行一个总结吧. 在某互联网公司工作了近一年的时间,但是频繁的业务需 ...

  9. Java后台工程师的3次面试

    第一次面试 我面的是一个中小公司,在BOSS直聘上面找的,去之前看了看关于Java的一些基础知识,在牛客网上面看的,也做了一下牛客网的题目.然后跟HR约了一个时间就去面试了.因为第一次面试,一点经验都 ...

随机推荐

  1. C#求任意两整数之和

    2019.9.11 作业要求: 求出任意两整数之和 解决方案: using System; using System.Collections.Generic; using System.Linq; u ...

  2. Java-Maven(十):Maven 项目常用plugins

    本文主要总结最近一段时间使用maven时,遇到需要maven plugins的一些简单总结. 1)在Build下重新指定最终打包报名 <build> <!--最终打包的包名,如果这里 ...

  3. php异步处理

    <?php namespace Index\Controller; use Core\Controller; class test extends Controller { public fun ...

  4. https://pingcap.com/blog-cn/flame-graph/

    https://pingcap.com/blog-cn/flame-graph/ 因为 TiKV 是自己内部使用了 jemalloc,并没有用系统的 malloc,所以我们不能直接用 perf 来探查 ...

  5. Kotlin 之操作符重载

    Kotlin 之操作符重载   参考: kotlin in action kotlin 官方参考文档 运算符重载 Kotlin允许我们为自己的类型提供预定义的一组操作符实现(这些操作符都对应的成员函数 ...

  6. [原]error LNK2005:"XXX已经在 XXX.obj 中定义 使用 /FORCE(强制文件输出)暴力解决

    参考:https://blog.csdn.net/LG1259156776/article/details/80828720 https://blog.csdn.net/cai18381306175/ ...

  7. flutter 中的搜索条实现

    import 'package:flutter/material.dart'; import 'package:flutter_app/SearchBarDemo.dart'; void main() ...

  8. Dart中的mixins

    /* mixins的中文意思是混入,就是在类中混入其他功能. 在Dart中可以使用mixins实现类似多继承的功能,with关键字 因为mixins使用的条件,随着Dart版本一直在变,这里讲的是Da ...

  9. 【DataBase】H2 DateBase与项目集成

    本例介绍H2与web项目的集成 项目启动H2数据库 1.新建Maven Web项目,参考:[Maven]Eclipse 使用Maven创建Java Web项目 2.引入h2的jar包依赖 <de ...

  10. 函数和宏实现打印的增强myprintf

    函数和宏实现打印的增强