《采访中收集程序猿》学习记录8

印象笔记同步分享:《程序猿面试宝典》学习记录8


《程序猿面试宝典》学习记录8

第16章 操作系统

操作系统面试题目主要包含进程、线程、内存管理、垃圾回收、以及缓存等诸方面。

16.1 进程

考点1:理解操作系统中的作业、进程、线程、管理
作业:
用户在一次解题或者一个事务处理过程中要求计算机系统所做工作的集合,它包含用户程序、所须要的数据及控制命令等。

作业是由一系列有序的步骤组成的。
进程:一个程序在一个数据集合上的一次执行过程。所以一个程序在不同的数据集合上执行。乃至一个程序在相同数据集合上的多次执行都是不同的进程。


线程:线程是进程中的一个实体,是被系统独立调度和运行的基本单位。
管理:管理实际上是定义了一个数据结构和载数据结构上的能为并发进程所运行的一组操作,这组操作能同步进程和改变管程中的数据。
考点2:进程间的通信怎样实现?
如今经常使用的进程间通信方式有信号信号量消息队列共享内存
进程通信就是指不同进程之间进程数据共享和数据交换。


通信:是一个广义的意义,不只指传递一些message。用法基本同样。
信号和信号量是不同的。他们尽管都可用来实现同步和相互排斥。但信号是使用信号处理器来进行的,信号量是使用P、V操作来实现的
消息队列:是一种比較高级的进程间通信的方法,它能够再进程间传送message,还能够传送一个“I seek you”
一个消息队列能够被多个进程所共享;假设一个进程中消息太多,能够选择多个消息队列来存放,可是就是管理会比較复杂些;共享消息队列的进程所发送的消息中除了message本身外另一个标志。这个标志能够指明消息将由哪个进程或者是哪类进程接受。用标记来声明自己的身份。


考点3:在windows编程中相互排斥器作用和临界区类似。两种有什么基本的差别呢?
两种的差别在于相互排斥器能够用于进程之间的相互排斥。可是临界区是线程之间的相互排斥。
考点4:短作业优先级方法指的是最短剩余时间作业优先,可剥夺式处理机的调度问题,做题方法,画一个图,之后分析各各进程的剩余时间
考点5:理解死锁

1)定义:死锁是指两个或两个以上的进程在运行过程中。因争夺资源而造成的一种互相等待的现象,若无外力作用。它们都将无法推进下去。此时称系统处于死锁状态或者系统产生了死锁。
2)必要条件: 仅仅要发生死锁,这几个条件一定成立
①相互排斥条件:一个资源每次仅仅能被一个进程使用
②请求和保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放
③不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺
④循环等待条件:若干进程之间形成一种头尾相接的循环等待资源的关系
3)死锁的解除与预防:
①採用资源静态分配策略。破坏部分分配的条件
②同意进程剥夺使用其它进程占有的资源,从而破坏“不可剥夺”条件
③採用资源有序分配法,破坏“坏路”条件
(这里须要注意。相互排斥条件时无法被破坏的)
考点6:理解fork

在Linux平台下。执行C程序,假设fork()函数不失败,推断输出结果

#include<stdio.h>#include<unistd.h>int main()
{
    int i=1;
    if(!fork())i++;
    printf("%d
",i);                  输出结果:1 2
    if(!fork())i++;
    printf("%d
",i);                  输出结果:1 2 3 4
    return 0;
}

考点7:请描写叙述进程的三种基本状态
1)就绪状态
当进程已分配到除CPU以外的全部必要条件的资源,仅仅要获得处理机便可马上运行,这时的进程状态称为就绪状态
2)运行状态 当进程已获得处理机,其程序正在处理机上运行,此时的进程状态称为运行状态
3)堵塞状态 正在运行的进程。因为等待某个时间发生而无法运行时。便放弃处理机而处于堵塞状态。引起堵塞的事件能够有非常多种,比如等待I/O完毕、申请缓冲区不能满足、等待信号
考点8:哲学家就餐问题
若系统中有五台画图仪。有多个进程均须要使用两台,规定每一个进程一次仅同意申请一台,则至多同意多少个进程參与竞争,而不会发生思锁。
用完餐之后,它总是先放下编号较高的餐叉,再放下编号较低的。在这样的情况下。当4个哲学家同一时候拿起他们手边编号较低的餐叉时。仅仅有编号最高的餐叉留在桌上,从而第5位哲学家就不能使用不论什么一仅仅餐叉了。故答案是4

16.2 线程

考点1:线程和进程的差别
进程是程序的一次运行线程能够理解为进程中运行的一段程序片段
1)进程间是独立的,这表如今内存空间、上下文环境上;线程执行在进程空间内
2)一般来说,进程无法突破进程边界存取其它进程内的存储空间。而线程因为处于进程空间内,所以同一进程所产生的线程共享同一个内存空间
3)同一进程中的两段代码不可以同一时候运行,除非引入线程
4)线程是属于进程的,当进程退出时,该进程所产生的线程都会被强制退出而且清除,线程占用的资源要少于进程所占有的资源。进程和线程都能够有优先级
5)进程间通过IPC通信,但线程不能够
考点2:PE文件

PE文件被称为可移植的运行体是Portable Execute的全称,经常使用的EXE、DLL、OCX、SYS、COM都是PE文件
考点3:Windows将遵循以下的哪种搜索来定位DLL?
1)包括EXE(可运行)文件的文件夹
2)进程的当前文件夹
3)Windows系统文件夹
4)Windows文件夹
5)PATH环境变量中列出的文件夹
考点4:静态链接库与动态链接库
静态链接库长处:

静态lib事实上就是一个壳子。静态链接库.lib文件即能够弃之不用。
1)代码运行速度快。直线的速度略比动态链接库快;
2)仅仅须要保证开发人员的计算机中有正确的.LIB文件。在以二进制形式公布程序时不需考虑在用户的计算机上的.LIB文件是否存在及版本号问题,可避免DLL地狱等问题
动态链接库的长处:
1)更加节省内存降低页面交换
2)DLL文件与EXE文件独立,仅仅要输出接口不变(即名称、參数、返回值类型和调用约定不变)。更换DLL文件不会对EXE文件造成不论什么影响,因而极大地提高了可维护性和可扩展性。
3)不同编程语言编写的程序仅仅要依照函数调用约定就能够调用同一个DLL函数,有助于共享数据和资源
4)提供售后支持。提供扩展MFC库类的机制,支持多语言程序,适合大规模软件开发
比較:
1)两者都是以lib为后缀的库,静态链接库,lib中的指令都所有被直接包括在终于胜出的exe文件里;若使用dll(动态链接库),该dll不必被包括在终于exe文件里
2)静态链接库中不能再包括其它的动态链接库或静态库。而动态链接库中还能够再包括其它的动态或静态链接库。
考点5:多线程/进程环境下,系统总响应时间的计算
假定我们有三个程序,每一个程序花费80%的时间进行I/O,20%的时间使用CPU,每一个程序的启动时间和其须要使用CPU进行计算机分钟数例如以下表所看到的。求多线程总响应时间
程序编号 启动时间 须要CPU时间(分钟)
1 00:00 3.5
2 00:10 2
3 00:15 1.5
解析:
0~10分钟:A进程 CPU利用效率0.2 10*0.2=2 A剩下的时间3.5-2=1.5
10~15分钟:A、B进程 CPU利用效率1-0.8*0.8=0.36 (15-10)*0.36=1.8 1.8/2=0.9A剩下的时间1.5-0.9=0.6 B剩下的时间2-0.9=1.1
15~??分钟:A、B、C进程 CPU利用效率1-0.8*0.8*0.8=0.488 A完毕时间0.6*3/0.488=3.69也就是15+3.69=18.69 之后CPU利用效率又为0.36 B剩下时间为1.1-0.6=0.5分钟 C剩下时间为1.5-0.6=0.9分钟 B结束时间0.5*2/0.36=2.78 2.78+18.69=21.46
之后C单独跑0.9-0.5=0.4 0.4/0.2=2分钟 故21.46+2=23.46

16.3 内存管理

考点1:比較内存管理方式
简述Windows内存管理的几种方式和优缺点?
页式管理、段式管理、段页式管理
1)页式管理:将个进程的虚拟空间划分为若干个长度相等的页。採用请求调页或预调页技术来实现内外存存储器的统一管理。
长处:没有外碎片,每一个碎片不超过页的大小
缺点:程序所有装入内存,要求有硬性支持。添加机器成本开销

2)段式管理:把程序依照内容或过程函数关系分成段。每段都有自己的名字,以段位单位分配内存,之后通过地址影投机构把段式虚拟地址转换为实际内存物理地址
长处:能够分别编写和编译,能够针对不同类型的段採用不同的保护,能够按段为单位来共享,通过动态链接进行代码共享
缺点:会产生碎片

3)段页式管理两者结合。先分成段。之后再把段分成页
长处:两者之间的结合
缺点:复杂性和开销大大加大了
考点2:关于内存管理概念性的问题

1)Belady's Anomaly出如今哪?
内存换页算法
2)什么是Thrashing?
很频繁的换页活动
3)避免死锁的一个著名的算法是?
银行家算法
4)虚拟储存器的基本思想是程序、数据、堆栈的总的大小能够超过物理存储器的大小。操作系统把当前的使用的部分保留在内存中,而把其它未被使用的部分保存在磁盘上



版权声明:本文博主原创文章。博客,未经同意不得转载。

原文地址:https://www.cnblogs.com/lcchuguo/p/4851577.html