当前位置: 首页 > 后端技术 > Java

Java面试题总结(操作系统)

时间:2023-04-02 01:40:02 Java

1.64位和32位的区别操作系统只是介于硬件和应用软件之间的一个平台。为32位操作系统设计的32位CPU。64位CPU为64位操作系统设计。2、CentOS与Linux的关系CentOS是Linux的众多发行版之一。Linux有三大发行版(:Slackware、debian、redhat),而Redhat有付费商业版和免费开源版。商业版称为RHEL系列,CentOS是根据OpenSourceCode发布的源代码重新编译而成。可以使用CentOS代替商业版的RHEL。两者的区别在于CentOS不包含闭源软件,是免费的。3.解释一下,LINUX下的线程,GDI类LINUX基于核心轻量级进程实现了“一对一”的线程模型,一个线程实体对应一个核心轻量级进程,线程间的管理在·实现在额外的核心函数库中。GDI类是一个图形设备编程接口类库。4、系统线程数的上限是多少?Linux系统中单个进程的最大线程数有其最大限制PTHREAD_THREADS_MAX。这个限制可以在/usr/include/bits/local_lim.h中查看。对于linuxthreads,这个值一般是1024。对于nptl,没有硬性限制,只受系统资源的限制。这个系统的资源主要是线程栈占用的内存。使用ulimit-s查看默认线程堆栈大小。一般这个值是8M=8192KB。5.如何杀死一个进程Killpid6。socket编程的三种通信模型,BIO、NIO、AIOJava中的BIO、NIO、AIO理解为Java语言对操作系统各种IO模型的封装。在使用这些API时,程序员不需要关心操作系统层面的知识,也不需要根据不同的操作系统编写不同的代码。只需使用JavaAPI。在讲BIO、NIO、AIO之前,我们先来回顾一下以下几个概念:同步和异步,阻塞和非阻塞。同步与异步同步:同步是指发起调用后,在被调用方处理完请求之前,调用不会返回。异步:异步是指发起调用后,被调用者立即收到响应,表示请求已收到,但被调用者不返回结果。这个时候,我们就可以处理其他的请求了。被调用者通常依靠事件、回调等机制将其返回结果通知给调用者。同步和异步最大的区别是如果是异步的话,调用者不需要等待处理结果,被调用者会通过回调等机制将返回结果通知给调用者。阻塞与非阻塞阻塞:阻塞是发起一个请求,调用者一直等待请求结果返回,即当前线程会被挂起,无法从事其他任务,只有当条件具备。非阻塞:非阻塞就是发起一个请求,调用者不必等待结果返回,可以先做其他事情。那么同步阻塞、同步非阻塞、异步非阻塞分别是什么意思呢?举个生活中的简单例子,你妈妈叫你烧水。当你还是个孩子的时候,你很愚蠢。你在哪里等水烧开(同步阻塞)。稍微长大一点,就知道每次烧开水都可以做其他事情,然后只需要时不时的检查一下水是否开着(同步非阻塞)。后来,你们家装了一个锅,水烧开会发出声音,只听声音就知道水开了。堵塞)。同步阻塞BIO、同步非阻塞NIO、异步非阻塞AIO。其中,BIO是一个连接,一个线程。NIO是每个请求一个线程。AIO实际上是每个请求一个线程。7、操作系统中的内存碎片及解决方法内存碎片分为:内部碎片和外部碎片。内部碎片是已经分配(可以清楚的表明属于哪个进程)但是不能使用的内存空间;内部碎片是区域内或页内的存储块。占用这些区域或页面的进程不使用这个内存块。当进程占用了这个存储块后,系统就不能使用了。在进程释放它或进程结束之前,系统不可能使用这个内存块。单通道连续分配只有内部碎片。多个固定的连续分配具有内部和外部碎片。外部碎片是指尚未分配(不属于任何进程)的内存空闲区域,但由于太小而无法分配给申请内存空间的新进程。外部碎片是任何已分配区域或页面之外的空闲内存块。这些内存块的总和可以满足当前应用程序的长度要求,但由于它们的地址不连续或其他原因,系统不能满足当前应用程序。使用好友系统算法。假设您要请求一个包含256个页框的块(即1MB)。该算法首先检查256个页面框架的链表中的空闲块。如果没有这样的块,则算法寻找下一个更大的页块,即在512个页框的链表中寻找一个空闲块。如果有这样一个块,内核将256个页框分成两等份,一半用来满足请求,另一半插入到256个页框的链表中。如果在512页框的块列表中没有找到空闲块,则继续寻找更大的块——1024页框的块。如果存在这样的块,则内核将1024个页框块中的256个页框作为请求,然后将剩下的768个页框中的512个插入到512个页框的链表中,然后将最后256个插入到一个链表中256个页面框架的列表。如果1024个页框的链表仍然是空的,则算法放弃并发出错误信号。8.分页存储主存被分成大小相等的块,称为主存块,也称为实页。当用户程序加载到内存中时,它以页面为单位进行分配。页面大小为2n,通常为1KB、2KB、2nKB等九、如何提高系统的并发能力1、提高CPU的并发计算能力(1)多进程&多线程(2)减少进程切换,使用线程,考虑进程BindCPU(3)减少不必要的锁,考虑无锁编程(4)考虑进程优先级(5)关注系统负载2,改进I/O模型(1)DMA技术(2)异步I/O(3)完善多路I/O就绪通知策略,epoll(4)Sendfile(5)内存映射(6)直接I/O10.什么情况下会发生死锁?防止死锁的策略有哪些?(1)互斥:一种资源一次只能被一个进程访问。即资源在一段时间内只能被一个进程占用,不能同时被两个或多个进程占用。这类独占资源,如光驱、打印机等,必须先由占用该资源的进程释放,其他进程才能占用该资源。这是由资源本身的属性决定的。(2)请求和持有条件:当一个进程因请求资源而阻塞时,它会持有获得的资源。该进程已经至少占用了一个资源,但又申请了一个新资源;因为资源已经被另一个进程占用,此时进程被阻塞;但是,它在等待新资源的同时继续占用已占用的资源。(3)非剥夺条件:进程获得的资源在用完之前不能强行剥夺,只能由拥有该资源的进程释放。(4)循环等待条件:若干资源形成头尾循环等待资源关系。死锁预防:银行家算法所谓银行家算法,就是系统在为进程分配资源之前,先计算这次资源分配的安全性。如果是安全的,它会分配它;安全状态,不进行分配。所谓安装状态就是有一个过程顺序。如果按照这个顺序为每个进程分配资源,则所有进程都可以顺利运行。这就是我们所说的系统安全,这个序列称为安全序列。这是一种预测。详尽列出所有的计划(游戏中的路线),判断是否有危险(你的角色能不能过关;血条,蓝条,攻击)。没有危险的方案就是安全序列(可以进行到最后并通过关卡)危险方案导致不安全状态,不进行分配。(半路被怪物打死,半路gg)