1.进程与线程的区别
1:进程是系统进行资源分配和调度的基本单位,而线程是进程的一个实体,是系统调度和分派的基本单位;
2:进程中各个线程可以共享进程的资源,线程之间可以相互的控制(并发编程),而进程之间不能共享资源(特殊情况除外,操作系统中有两个方法就就可以让一个进程直接去读取另外一个进程的内存,但是是高度保密的);进程之间共享资源有相互的通信模式。
3:进程只是一个概念,他真是存在的实体是进程控制块(PCB),他存储进程的相关信息,创建一个进程就是创建一个进程控制块,销毁一个进程就是销毁该进程的进程控制块;进程控制块包含的信息:如进程的程序和数据在内存中中的起始地址等,进程的名字,进程的父亲,进程的儿子,进程调度信息(就绪,阻塞,执行等信息);
4:线程中也有TCP,线程控制块,线程的实体,线程中的tcb所保存的线程的状态比pcb的状态要多,因为tcp设计到各个线程之间的相互协调等。
5:进程间通信的三种方式:共享存储系统,消息传送系统,和管道系统;
2. 死锁的必要条件,怎么处理死锁。
1:进程死锁的必要条件:
1,互斥(也就是一个资源多个进程共享,如打印机)
2是资源的不可抢占(一个资源只能被拥有它的进程释放,不能被别的进程抢占,如打印机就是不可以,但是cpu可以抢占)
3是请求和保持(进程已经占有一个资源,但是又去申请新的资源,而该资源被别的进程占有)
4是环路等待;(也就是一个进程占用了一个资源,然后去申请别进程占有的资源,而别的进程占有该资源,然后又来申请之前线程占有的资源,形成一个环路)
2:只要发生死锁,这四个条件一定同时成立,同时成立则不一定造成死锁。
3:解决线程死锁的方法:
1死锁的预防(让一个线程占有所有的资源,使用完以后才可以给别的线程使用):去破环产生死锁的四个条件(效率比较低,破环了多道程序的并发执行,破坏资源共享原则)
2死锁的避免(银行家算法:在分配一个资源个进程的时候,先检查资源是否处于安全状态。如此次分配不会导致系统从安全状态转变为不安全状态,便可以将该资源分配给进程。):在进程运行时采取措施,而不是破环必要条件,在进程申请资源时避免系统进入不安全状态(不安全状态的检查);
3死锁的检查和解除:系统检查到死锁,然后采用杀死进程的方法解除死锁
4:发生死锁采用人工重启(个人电脑可以采用这种方式,比较重要的就不可以)
3. Window内存管理方式:段存储,页存储,段页存储。
1:分页存储:将程序的逻辑地址空间划分为固定大小的页(page),而物理内存划分为同样大小的页框(page frame)。程序加载时,可将任意一页放人内存中任意一个页框,这些页框不必连续。
页式存储优点:没有外碎片,但会有内碎片,可以不连续存储,缺点: 要求程序全部装入内存,没有足够的内存,程序就不能执行。
页表:页号(一个进程中的逻辑页号,从0开始)和块号(物理内存中的实际块号,整个内存空间的块号是唯一的,是从0开始的)
逻辑地址到物理地址的转换:先获取逻辑地址,并按照页的划分将逻辑地址划分为页号和页内偏移地址,进程物理映射的时候,先通过页表获取对应物理地址的块号,然后将将偏移量直接映射到物理块的偏移量中。如何计算实际地址:如果一页大小为1k,对应的物理地址的块号是5,则对应的地址就是5*1024(物理地址是从0开始计算块号的)+页内偏移地址就是逻辑对应的实际地址。
如何保证各个进程的块不冲突呢?整个系统有一张页面表,记录了物理内存的拿一些块被占用,拿一些块没有被占用,只要在分配内存的时候去查找一下这张页面表,也就不会去造成内存分配冲突。
对页表的优化:一般来说,页表都存贮在主存当中,这样,处理器要进行读写数据的时候,要进行两次操作,第一次用来查找页表将操作数的逻辑地址变换为物理地址;第二次完成真正的读写操作。这样写一次内存需要两次操作内存,耗费资源和时间,因此就出现了块表。
快表:将页表读入cpu的一个寄存器(cpu的高速缓冲器)中,由于高速缓存器容量有限,只能存储一部分页表(可以采用LRU算法存储常用的页表映射(块表)),当cpu计算出逻辑地址以后,直接去快表中读取对应的块号,而不到注册中获取,如果没有对应的映射,就到主存中去存取。
2:段式存储:(相对于页存储来说,是为了满足用户的需求而出现的一种内存分配方式)用户将自己的应用程序按照逻辑将内存地址分成若干个段,每个段都有一个自己的名字,而且每个段都是从0开始编址的,然后程序加载的时候,直接将各个段映射到内存中去,各个段在内存之间可以是不连续的,但是在段内是连续的。
段式存储的优点:各个段是一个完整的逻辑地址,因此可以对各个段施加不同的安全保护。还有就是没有内碎片,形成的外碎片也可以通过内存压缩来解决。缺点:就是要将各个段全部加载到内存,不能使用虚拟内存。
段表物理地址的计算:段地址由两部分组成,段号和段内地址。通过段号在段表中找到对应的段号,然后通过段表段号对应的段的基地址+段内偏移地址就可以计算出物理地址。
段页式存储:将内存安装程序逻辑关系分割成多个段,段内采用页式划分;
优点:可以充分提高内存利用率,也可以采用分段的方式按逻辑划分内存地址。
4. 进程的几种状态。
就绪态,阻塞态,运行态,对进程的状态可以进行细化(挂起,激活,主要是方便用户在进程运行的时候中间过程是可控的,可以在运行期间暂停某些进程,减轻系统负荷或者暂停进程故障排查(我们eclipse中断点应该就是这么实现的))。
细分以后就成了:活动就绪态,静止就绪态,活动阻塞态,静止阻塞态,运行态,(为什么叫静止时因为挂起以后如果不激活,他会一直挂起)
五种状态的转换,阻塞态必须先转换成就绪态才能到运行态,运行态可以直接到阻塞态,或者就绪态(或者直接被挂起,进入静止阻塞态,静止阻塞必须要转换成阻塞就绪,然后转换成活动就绪态)。
5. IPC几种通信方式。
1:共享内存模式:共享同一内存区间(我们的复制粘贴就是采用共享内存实现的)
2:消息队列模式:一个进程将消息发送到一个公共的消息队列缓存区中,然后另一个线程自己去该公共消息队列缓存区去读取是否有自己的消息(间接通信),还有一种是直接通信,通过一个进程通过内核直接将消息发送到一个进程自己的消息缓存队列缓存区(而不是公共消息队列缓冲区),然后目标线程有空就去读取(缺点,只能实现P2P通信,优点:就是比较快)。
3:管道模式:主要就是借助一个中间临时文件,一个进程向该文件中写数据,另一个进程从该管道中获取数据。(该中间文件与我们一般使用的文件的区别就是,先进先出,而且具有数据不可再现性(被读取以后就没有了),无名管道关机后自动删除该文件,该文件并不存放到硬盘中)
4:File文件通信:通过文件流的形式进行通信,然后一个从通过文件流从该文件中读取消息。(特点就是慢)
5:RPC远程进程间通信,也就是Socket通信。主要是用于远程通信
6:LPC本地进程通信,对RPC的改进。同一台主机中两个进程通过端口进行通信。
6. 什么是虚拟内存。
虚拟内存就是将硬盘中划分出一部分区域来当内存使用,是将部分内存的持久化到硬盘,当需要的时候就从内存中去读取。并将暂时不需要的内存信息存储到硬盘中去。
(请求分页系统(重点),请求分段系统,请求段页式)就是针对虚拟内存的。通过请求实现内存与外存的信息置换。
置换算法:
① FIFO先进先出算法,该操作在操作系统中经常被用到,比如作业调度(主要实现简单,很容易想到)。
② LRU(Least recently use)最近最少使用算法。根据使用时间到现在的长短来判断。
③ LFU(Least frequently use)最少使用次数算法。根据使用次数来判断。
④ OPT(Optimal replacement)最优置换算法,理论的最优,理论;就是要保证置换出去的是不再被使用的页,或者是在实际内存中最晚使用的算法。
7. 虚拟地址、逻辑地址、线性地址、物理地址的区别。
虚拟地址:程序自身定义的地址,需要转换成物理地址才能使用
逻辑地址:段内偏移地址,也是虚拟地址。
物理地址:内存中的实际地址。
线性地址:cpu可寻址的地址,段内偏移地址+段基址。然后该地址就是实际的了地址。
因为是做android的这一块问得比较少一点,还有可能上我简历上没有写操作系统的原因。
推荐书籍:《深入理解现代操作系统》
相关推荐
面试题.doc————电子版_doc版
面试.doc————电子版_doc版
网安面试必考题合集--含答案
全网最全-谷粒商城项目-面试总结-简历优化_Java-You的博客-CSDN博客 .html
这是因为客户端负责计算哈希值并直接与目标服务器通信,这意味着增加新的Memcached服务器非常简单且不会影响现有服务器的负载。 - **易于扩展**:当系统需要更多内存或处理能力时,可以通过简单地添加更多的...
谷粒学苑-在线教育实战项目-面试总结-简历优化_Java-You的博客-CSDN博客 .html
在 IT 面试中,理解基础概念以及其在实际编程中的应用至关重要。以下是对给定文件中涉及知识点的详细解答: 1. **逻辑操作(&, |, ^)与条件操作(&&, ||)**: - **逻辑操作**:在 Java 中,`&` 和 `|` 是按位逻辑...
6. 静态与非静态内部类: - 静态内部类(也称为嵌套类)可以访问外部类的静态成员,但不能访问非静态成员。非静态内部类可以访问外部类的所有成员。 - 在给定的选择题中,选项A和D错误,因为非静态内部类不能有...
Java全能学习面试手册——互联网企业面试真题.zip 01 java面试——北京-百度-Java中级.pdf 02 java面试——北京-京东-Java中级.pdf 03 java面试——广州-唯品会-Java大数据开发工程师.pdf 04 java面试——杭州-阿里...
《Typcial-C.zip_typcial——C语言程序设计的精华概览》 在计算机科学的世界里,C语言无疑是一门至关重要的编程语言。以其简洁、高效和广泛的适用性,C语言成为了许多初学者入门以及专业人士深入研究的基础。...
《Java工作守门人——面试必备辞典》 在Java编程的世界里,面试是每一位开发者通往职业发展的重要关卡。这份名为"dictionary-of-java-job-keepers.rar_Keepers"的压缩包,就如同一个守护者,它包含了Java程序员面试...
本文档总结了 Oracle 数据库相关的面试问题和答案,涵盖了 optimizer_mode、CBO、RBO、索引、排序、表空间、回滚段、绑定变量、SQL 优化等多个方面的知识点。 _optimizer_mode_ Optimizer_mode 是 Oracle 数据库中...
《C++面试题大全——为你的硕士求职之路保驾护航》 在当今竞争激烈的IT行业中,拥有扎实的编程基础和丰富的面试经验对于寻求硕士级别的职位至关重要。本资料“C--for-interview.rar”是一个针对C++面试的精选题库,...
研究生面试英文自我介绍--终极整理版学习总结.doc
全网最齐全的Java面试题库-附答案-持续更新
----------------J100IT名企面试总结.pdf ----------------100IT名企java面试真题整理面试必考点.pdf ----------------18个万能非技术面试题.docx ----------------100IT名企java面试必考面试题.pdf ----Interview-...
总结来说,制作一份有效的简历需关注信息的清晰度、语言的通俗性和邮件的规范性,以此来吸引HR的注意力,提高面试机会。同时,根据不同的职位需求和个人特点灵活调整简历内容,使简历更具针对性。
软件大数据面试笔试复习资料面试技巧HR面试常问的问题总结面试笔试题整理资料合集: 01大数据面试复习----Java基础---集合类、多线程、JVM 02大数据面试复习----画重点----常问问题分析 03大数据面试复习----画重点--...
Java全能学习面试手册——Java面试题库.zip 01 7道消息队列ActiveMQ面试题!.pdf 02 10道Java高级必备的Netty面试题!.pdf 03 10道Java面试必备的设计模式面试题!.pdf 04 10个Java经典的List面试题!.pdf 05 10个...