1.64位和32位的区别
操作系统只是硬件和应用软件两头的一个平台。32位操作系统针对的32位的CPU设计。64位操作系统针对的64位的CPU设计。
2.CentOS 和 Linux的关系
CentOS是Linux泛滥得发行版本之一,linux有三大发行版本(:Slackware、debian、redhat),而Redhat有免费的商业版和收费的开源版,商业版的业内称之为RHEL系列,CentOS是来自于按照凋谢源代码规定而颁布的源代码从新编译而成。能够用CentOS代替商业版的RHEL应用。两者的不同,CentOS不蕴含关闭源代码软件,是收费的。
3.解释一下,LINUX下的线程,GDI类
LINUX实现的就是基于外围轻量级过程的”一对一”线程模型,一个线程实体对应一个外围轻量级过程,而线程之间的治理在·核外函数库·中实现。
GDI类为图像设施编程接口类库。
4.零碎线程数量下限是多少
Linux 零碎中单个过程的最大线程数有其最大的限度 PTHREAD_THREADS_MAX。
这个限度能够在/usr/include/bits/local_lim.h中查看 ,对 linuxthreads 这个值个别是 1024,对于 nptl 则没有硬性的限度,仅仅受限于零碎的资源。
这个零碎的资源次要就是线程的 stack 所占用的内存,用 ulimit -s 能够查看默认的线程栈大小,个别状况下,这个值是8M=8192KB。
5.如何杀死一个过程
Kill pid
6.socket编程的三种通信模型,BIO,NIO,AIO
Java 中的 BIO、NIO和 AIO 了解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在应用这些 API 的时候,不须要关怀操作系统层面的常识,也不须要依据不同操作系统编写不同的代码。只须要应用Java的API就能够了。
在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。
同步与异步
同步: 同步就是发动一个调用后,被调用者未解决完申请之前,调用不返回。
异步: 异步就是发动一个调用后,立即失去被调用者的回应示意已接管到申请,然而被调用者并没有返回后果,此时咱们能够解决其余的申请,被调用者通常依附事件,回调等机制来告诉调用者其返回后果。
同步和异步的区别最大在于异步的话调用者不须要期待处理结果,被调用者会通过回调等机制来告诉调用者其返回后果。
阻塞和非阻塞
阻塞: 阻塞就是发动一个申请,调用者始终期待申请后果返回,也就是以后线程会被挂起,无奈从事其余工作,只有当条件就绪能力持续。
非阻塞: 非阻塞就是发动一个申请,调用者不必始终等着后果返回,能够先去干其余事件。
那么同步阻塞、同步非阻塞和异步非阻塞又代表什么意思呢?
举个生存中简略的例子,你妈妈让你烧水,小时候你比拟笨啊,在哪里傻等着水开(同步阻塞)。等你略微再长大一点,你晓得每次烧水的空隙能够去干点其余事,而后只须要时不时来看看水开了没有(同步非阻塞)。起初,你们家用上了水开了会发出声音的壶,这样你就只须要听到响声后就晓得水开了,在这期间你能够轻易干本人的事件,你须要去倒水了(异步非阻塞)。
同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。其中BIO是一个连贯一个线程。NIO是一个申请一个线程。AIO是一个无效申请一个线程。
7.操作系统里的内存碎片and解决办法
内存碎片分为:外部碎片和内部碎片。
外部碎片就是曾经被调配进来(能明确指出属于哪个过程)却不能被利用的内存空间;
外部碎片是处于区域外部或页面外部的存储块。占有这些区域或页面的过程并不应用这个存储块。而在过程占有这块存储块时,零碎无奈利用它。直到过程开释它,或过程完结时,零碎才有可能利用这个存储块。
单道间断调配只有外部碎片。多道固定间断调配既有外部碎片,又有内部碎片。
内部碎片指的是还没有被调配进来(不属于任何过程),但因为太小了无奈调配给申请内存空间的新过程的内存闲暇区域。
内部碎片是出于任何已调配区域或页面内部的闲暇存储块。这些存储块的总和能够满足以后申请的长度要求,然而因为它们的地址不间断或其余起因,使得零碎无奈满足以后申请。
应用搭档零碎算法。
假如要申请一个256 个页框的块(即1MB)。算法先在256 个页框的链表中查看是否有一个闲暇块。如果没有这样的块,算法会查找下一个更大的页块,也就是,在512 个页框的链表中找一个闲暇块。如果存在这样的块,内核就把256 的页框分成两等份,一半用作满足申请,另一半插入到256 个页框的链表中。如果在512 个页框的块链表中也没找到闲暇块,就持续找更大的块 —— 1024个页框的块。如果这样的块存在,内核把1024个页框块的256 个页框用作申请,而后从残余的768 个页框中拿512个插入到512个页框的链表中,再把最初的256个插入到256个页框的链表中。如果1024个页框的链表还是空的,算法就放弃并收回错信号。
8.页式存储
主存被等分成大小相等的片,称为主存块,又称为实页。
当一个用户程序装入内存时,以页面为单位进行调配。页面的大小是为2n ,通常为1KB、2KB、2n KB等
9.零碎如何进步并发性
1、进步CPU并发计算能力
(1)多过程&多线程
(2)缩小过程切换,应用线程,思考过程绑定CPU
(3)缩小应用不必要的锁,思考无锁编程
(4)思考过程优先级
(5)关注零碎负载
2、改良I/O模型
(1)DMA技术
(2)异步I/O
(3)改良多路I/O就绪告诉策略,epoll
(4)Sendfile
(5)内存映射
(6)间接I/O
10.什么状况下会产生死锁?预防死锁的策略有哪些?
(一)互斥条件:一个资源一次只能被一个过程拜访。即某个资源在一段时间内只能由一个过程占有,不能同时被两个或两个以上的过程占 有。这种独占资源如CD-ROM驱动器,打印机等等,必须在占有该资源的过程被动开释它之后,其它过程能力占有该资源。这是由资源自身的属性所决定的。
(二)申请与放弃条件:一个过程因申请资源而阻塞时,对已取得的资源放弃不放。过程至多曾经占有一个资源,但又申请新的资源;因为该资源已被另外过程占有,此时该过程阻塞;然而,它在期待新资源之时,仍持续占用已占有的资源。
(三)不剥夺条件:过程曾经取得的资源,在未应用完之前不能强行剥夺,而只能由该资源的占有者过程自行开释。
(四)循环期待条件:若干资源造成一种头尾相接的循环期待资源关系。
预防死锁:
银行家算法
所谓银行家算法是是指,零碎在为过程分配资源之前,首先计算此次资源分配的安全性,如果是平安的,则进行调配;如果这次调配会导致进入不平安状态,不进行调配。
所谓的装置状态是指存在一个过程序列,如果依照这个程序为各个过程分配资源,则所有的过程都能顺利运行实现,这是咱们说零碎是平安的,这个序列叫做平安序列。
是一种预判。穷举出所有的计划(游戏中的路线),判段是否有危险(本人的角色是否通关;血条、蓝条、攻打)
没有危险的计划就是平安序列(能扛到起点,通过关卡)
有危险的计划就会导致进入不平安状态,不进行调配。 (半路被怪打死,中途gg了)