Linux操作系统

文章目录

Linux

《多CPU,多核,多进程,多线程》

Linux的I/O模型介绍以及同步异步阻塞非阻塞的区别?

阻塞IO
非阻塞IO
IO复用
信号驱动IO
异步IO
《简述linux同步与异步、阻塞与非阻塞概念以及五种IO模型》

Linux进程管理
Linux内核的进程调度
  1. Linux进程分为两种,实时进程和非实时进程;
  2. 优先级分为静态优先级和动态优先级,优先级的范围;
  3. 调度策略,FIFO,LRU,时间片轮转
  4. 交互进程通过平均睡眠时间而被奖励;
fork返回值是什么?
什么是虚拟内存?
文件系统的理解(EXT4,XFS,BTRFS)

《如何选择文件系统:EXT4、Btrfs 和 XFS》
EXT4:使用广泛
XFS:XFS 文件系统是扩展文件系统的一个扩展,XFS 文件系统有一些缺陷,例如它不能压缩,删除大量文件时性能低下。
btrfs:有很多好用的功能,例如写复制、扩展校验、快照、清洗、自修复数据、冗余删除以及其它保证数据完整性的功能。

Linux的内存管理?

《深度讲解Linux内存管理和Linux进程调度-打通任督二脉》

Linux基本命令?

命令作用pwd显示当前目录rm删除touch生成文件cat读取指定文件的内容并打印到终端输出mkdir新建目录make directoryfile查看文件类型whereis,which,find 和 locate查找chown改变文件所有者df查看磁盘容量wc计数工具tr删除一段文本信息中的某些文字。或者将其进行转换join连接两个文件paste它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开

grep、awk、sed掌握程度?

grep命令用于打印输出文本中匹配的模式串,它使用正则表达式作为模式匹配的条件。
sed用于过滤和转换文本的流编辑器。
AWK是一种用于处理文本的编程语言工具。

Linux是如何避免内存碎片的

伙伴算法,用于管理物理内存,避免内存碎片;
高速缓存Slab层用于管理内核分配内存,避免碎片。

文件权限的查看与修改?

文件权限查看ls -l,查看文件所有者,所属组,其他的文件权限,rwx为777
修改使用chmod命令

Linux如何打开一个文件?如何处理一个正在动态增长的文件?
IO复用的三种方法,poll、epoll和select的特点和区别

select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。
select:是最初解决IO阻塞问题的方法。用结构体fd_set来告诉内核监听多个文件描述符,该结构体被称为描述符集。由数组来维持哪些描述符被置位了。对结构体的操作封装在三个宏定义中。通过轮寻来查找是否有描述符要被处理,如果没有返回。 存在的问题:
内置数组的形式使得select的最大文件数受限与FD_SIZE;
每次调用select前都要重新初始化描述符集,将fd从用户态拷贝到内核态,每次调用select后,都需要将fd从内核态拷贝到用户态;
轮寻排查当文件描述符个数很多时,效率很低;

poll:通过一个可变长度的数组解决了select文件描述符受限的问题。数组中元素是结构体,该结构体保存描述符的信息,每增加一个文件描述符就向数组中加入一个结构体,结构体只需要拷贝一次到内核态。poll解决了select重复初始化的问题。轮寻排查的问题未解决。
epoll:轮寻排查所有文件描述符的效率不高,使服务器并发能力受限。因此,epoll采用只返回状态发生变化的文件描述符,便解决了轮寻的瓶颈。
《select、poll、epoll之间的区别总结[整理]》

为什么使用IO多路复用,最主要的原因是什么?

epoll有两种触发模式?这两种触发模式有什么区别?编程的时候有什么区别?

上一题中编程的时候有什么区别,是在边缘触发的时候要把套接字中的数据读干净,那么当有多个套接字时,在读的套接字一直不停的有数据到达,如何保证其他套接字不被饿死

(面试网易游戏的时候问的一个问题,答不上来,印象贼深刻)。

GDB调试
Linux进程和线程如何创建、退出?进程退出的时候,自己没有释放的资源(如内存没有free)会怎样?
共享文件映射mmap

mmap建立进程空间到文件的映射,在建立的时候并不直接将文件拷贝到物理内存,同样采用缺页终端。mmap映射一个具体的文件可以实现任意进程间共享内存,映射一个匿名文件,可以实现父子进程间共享内存。

操作系统

什么是临界区?进程进入临界区的调度原则是?

临界区是一段对共享资源的保护代码,该保护代码在任意时刻只允许一个线程对共享资源访问。
进程进入临界区的调度原则是:
①如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。②任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。③进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。④如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

互斥对象、临界区和事件的区别?

互斥是一种用途非常广泛的内核对象。能够保证多个线程对同一共享资源的互斥访问。
事件对象也是属于内核对象,它的主要成员包括:1.使用计数 2.指明该事件是一个自动重置事件还是一个人工重置事件的布尔值3.指明该事件处于已通知状态还是未通知状态的布尔值。
互斥对象、事件对象与临界区的比较:
互斥对象、事件对象都是属于内核对象,利用内核对象进行线程同步,速度较慢,但可以在多个进程中的多个线程间可以进行同步。
临界区属于在用户模式下,同步速度较快,但是很容易进入死锁状态,因为在等待进入临界区时无法设定超时值。

进程和线程的区别?进程和程序的区别?

进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。
线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。
进程和程序的区别
进程是动态的,而程序是静态的。
进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为1个独立单位得到操作系统的认可。
1个程序可以对应多个进程,但1个进程只能对应1个程序。进程和程序的关系犹如演出和剧本的关系。
一个进程可以创建多少个线程?和什么有关?
一个进程可以创建的线程数由可用虚拟空间和线程的栈的大小共同决定

僵尸进程?

《僵尸进程?》

什么是死锁?死锁产生的原因?死锁四个必要条件?死锁的解除、死锁控制?

死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。
死锁产生的原因
系统资源的竞争
系统资源的竞争导致系统资源不足,以及资源分配不当,导致死锁。
进程运行推进顺序不合适
进程在运行过程中,请求和释放资源的顺序不当,会导致死锁。
死锁的四个条件
互斥条件:一个资源每次只能被一个进程使用,即在一段时间内某 资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。
请求与保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
不可剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能 由获得该资源的进程自己来释放(只能是主动释放)。
循环等待条件: 若干进程间形成首尾相接循环等待资源的关系
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
死锁的避免与预防
死锁避免的基本思想
系统对进程发出每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,如果分配后系统可能发生死锁,则不予分配,否则予以分配。这是一种保证系统不进入死锁状态的动态策略。
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。所以,在系统设计、进程调度等方面注意如何让这四个必要条件不成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的情况下占用资源。因此,对资源的分配要给予合理的规划。
死锁避免和死锁预防的区别
死锁预防是设法至少破坏产生死锁的四个必要条件之一,严格的防止死锁的出现,而死锁避免则不那么严格的限制产生死锁的必要条件的存在,因为即使死锁的必要条件存在,也不一定发生死锁。死锁避免是在系统运行过程中注意避免死锁的最终发生。
死锁的解除
一旦检测出死锁,就应立即釆取相应的措施,以解除死锁。死锁解除的主要两种方法:

抢占资源。从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以解除死锁状态。
终止(或撤销)进程。终止(或撤销)系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态解脱出来。

一个程序从开始运行到结束的完整过程(四个过程)

预处理,编译,汇编,链接。
源代码.c 文件先经过预处理器,生成一个中间文件.i 文件,这个阶段有两个作用,一是把include的头文件内容进行替换,二是处理宏定义。
.i 文件经过编译生成汇编.s 文件
.s 的汇编文件经过汇编器生成.obj 的目标文件
.obj 经过链接器和 lib(静态链接库) dll(动态链接库)文件生成 exe 可执行程序

头文件在编译过程中的作用?

头文件并不参加链接和编译。编译器第一步要做的就是简单的把头文件在包含它的源文件中展开。不知你是否能理解这句话。也就是头文件里面有什么内容,通通把它移到包含这个头文件的源文件里。(我觉得这是个很重要的概念,可以帮助我们简化理解编译链接的过程,包括理解头文件中定义静态变量或静态函数是怎么回事)。编译器经过这一步转换后剩下什么呢?就是一堆cpp文件了。而头文件已经不再是编译器需要关心的东西了。编译器接下来就要处理这一堆cpp文件了。
所以第一个阶段是预处理阶段,在正式的编译阶段之前进行。预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容。如#include指令就是一个预处理指令,它把头文件的内容添加到.cpp文件中。 第二个阶段编译、优化阶段。

为何不能在头文件中定义?

防止多重定义。

进程间通信的方法?

管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
共享存储SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
信号量Semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
套接字Socket:套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

线程同步方法?

1.锁机制
1.1互斥锁:提供了以排它方式阻止数据结构被并发修改的方法。
1.2读写锁:允许多个线程同时读共享数据,而对写操作互斥。
1.3条件变量:可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
2.信号量机制:包括无名线程信号量与有名线程信号量
3.信号机制:类似于进程间的信号处理。
线程间通信的主要目的是用于线程同步,所以线程没有象进程通信中用于数据交换的通信机制。

线程创建的方式有几种?
进程调度算法?

先来先去服务
短作业(进程)优先调度算法SJ§F
轮转法
多级反馈队列算法
页面置换方法
最优页面置换算法
最近未使用页面置换算法(NRU)
先进先出页面置换算法(FIFO)及其改进
时钟页面置换算法(clock)
最近最少使用页面置换算法(LRU)
工作集算法
布隆过滤器的优点与缺点
布隆过滤器处理大规模问题时的持久化,包括内存大小首先、磁盘换入换出问题
文件读写使用的系统调用

线程池的了解、优点、调度处理方式和保护任务队列的方式

于是为了避免一个程序需要大量创建线程时的不必要浪费,也就是最好的去避免线程创建与线程销毁的时间浪费,此时线程池就出现了。线程池的实现就是在初始的时候创建一些线程(业界通常认为创建CPU核心数的两倍为最佳,也有说是两倍+1),创建的线程为挂起状态(就绪),当我们有任务要处理的时候,我们就激活一个就绪的线程去完成任务,完成任务后,线程又变为就绪态进行继续等待任务的到来。这样过程使得每个线程一次创建,多次使用,如果你的程序并没有多次任务处理,使得线程池中的线程长时间处于就绪态,此时就建议你直接使用一个线程就好,不必使用线程池。
线程池怎么创建?
怎么回收线程
多线程同步(项目中可能会问)
mencache
异常和中断的区别
如何保证线程安全?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值