1. 什么是操作系统的内核(Kernel)
- 操作系统的内核是操作系统的核心部分,负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。
- 操作系统的内核是连接应用程序和硬件的桥梁,决定着操作系统的性能和稳定性。
2. CPU和内核的区别
- 操作系统的内核属于操作系统层面,而CPU属于硬件。
- CPU主要提供运算,处理指令的能力,内核主要负责系统管理,比如内存管理。他屏蔽了对硬件的操作。
3. 什么是系统调用
在运行的用户程序中,
凡是和系统态级别的资源相关的操作(如文件管理、进程控制、内存管理等)
,都必须通过系统调用的方式向操作系统提出服务请求,并由操作系统代为完成。
这些系统调用按功能分为如下几类:
- 设备管理
- 文件管理
- 进程控制
- 进程通信
- 内存管理
4. 进程间通信方式有哪些
- 管道/匿名管道(Pipes) : 用于具有亲缘关系的父子进程间或者兄弟进程间通信。
- 有名管道(Names Pipes):匿名管道由于没有名字,只能用于亲缘关系的进程间通信,为了克服这个缺点,提出了有名管道。有名管道严格遵循先进先出。有名管道以磁盘文件的方式存在,可以实现本机任意两个进程通信。
- 信号(Signal): 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
- 消息队列:消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识。管道和消息队列的通信数据都是先进先出的原则,与管道不同的是消息队列存放在内核中,只有在内核重启或者显示的删除一个消息队列时,消息队列才会被真正删除。
消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,比FIFO更有优势。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
- 信号量:信号量是一个计数器,用于多进程对共享数据的访问,信号量的意图在与进程间同步,这种通信方式主要用于解决和同步相关的问题并避免竞争条件。
- 共享内存:多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。
- 套接字:此方法主要用于在客户端和服务器之间通过网络进行通信。套接字是支持TCP/IP网络通信的基本操作单元。可以看作是不同主机之间的进程进行双向通信的端点。
5. 进程间同步的方式以及优缺点
- 临界区:通过对多线程的串行化来访问公共资源或者一段代码。
优点:保证某一时刻只有一个线程能访问数据的简便方法。
缺点:虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程中的线程。- 互斥量:互斥量和临界区类似,互斥对象只有一个,只有拥有互斥对象的线程才能访问资源。
优点:使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。
缺点:互斥量可以跨越进程使用,所以创建互斥量需要的资源更多。- 信号量:为控制一个具有有限数量用户资源而设计。允许多个线程在同一时刻访问同一资源。当信号量的最大资源数=1时就是互斥量了。
- 事件:用来通知线程有一些事件已发生,从而启动后继任务的开始。
6. 僵尸进程、孤儿进程是什么
- 僵尸进程:通常来说,使用fork()系统调用从一个父进程创建出一个子进程,
子进程退出,是需要父进程调用wait()或者是waitpid()函数来收回子进程的资源,如果父进程没有调用,子进程的信息就会一直在内存中,而不会被回收,变成僵尸进程
。- 孤儿进程:就是父进程先退出了,他的子进程会被init进程接管(init进程是内核启动时,创建出来的进程,是一个以root身份运行的普通用户进程,是永远不会停止的),由他来收集子进程的状态。
7. 说一下常见的内存管理机制
块式管理:远古时代的计算机操作系统的内存管理方式,将内存分为几个固定大小的块。每个块中只包含一个进程,如果程序需要内存的话,操作系统就会分配给他一块。
页式管理:把主存分为大小相等且固定的一页一页的形式,页较小,相对于块式管理的划分力度更大,提高了内存利用率,减少了内存碎片。页式管理通过页表对应逻辑地址和物理地址。
段式管理:段式管理把主存分为一段段的,每一段的空间又要比页的空间小很多。
8. 什么是块表和多级页表
在分页内存管理中,很重要的两点:
- 虚拟地址到物理地址的转换要快。
- 解决虚拟地址空间大、页表也会很大的问题。
快表
为了解决虚拟地址到物理地址的转换速度,操作系统在页表方案基础上加入了快表来加速虚拟地址到物理地址的转换。可以把快表理解为一种特殊的高速缓冲存储器,其中的内容是页表的一部分或者全部内容。作为页表的cache,他的作用和页表类似,但是提高了访问速率。
多级页表
引入多级页表主要目的是为了避免把页表全部一直放在内存中占用过多空间,特别是那些根本就不需要的页表。
9. 为什么linux体系结构要分为用户空间和内核空间
- 现代CPU实现了不同的工作模式,不同模式下CPU可以执行的指令和访问的寄存器不同。
- Linux从CPU角度出发,为了保护内核安全,把系统分为两部分。
用户空间和内核空间是程序执行的两种不同的状态,我们可以通过两种方式完成用户空间到内核空间的转换。
- 系统调用
- 硬件中断。
10. inode是什么?有什么作用?
inode是linux/unix文件系统的基础。
硬盘的最小存储单位是扇区,块由多个扇区组成。文件数据存储在块中。块的常见大小是4kb,约为8个连续的扇区组成(每个扇区的)。一个文件可能会占用多个block,但是一个块只能放一个文件。
虽然将文件存储在了block中,但是还需要一个空间来存储文件的元信息;如某个文件分为几块、每一块在的地址、文件拥有者、创建时间、权限等。这种存储文件元信息的区域就叫inode
。
可以使用istat命令查看文件的inode信息,Linux/Unix操作系统不使用文件名来区分文件,而是使用inode号码区分不同的文件。
总结:
- inode:记录文件的属性信息,可以使用istat命令查看inode信息。
- block:实际文件的内容,如果一个文件大于一个块,那么将占用多个block。
11. 什么是硬链接和软链接
硬链接:Linux下的文件是通过索引节点(inode)识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针。系统不为他重新分配inode,每添加一个硬链接,文件的链接数加1.
不足:(1). 不可以在不同文件系统的文件间建立链接;(2).只有超级用户才可以为目录创建硬链接软链接:软链接克服了硬链接的限制,任何用户可以创建指向目录的符号链接。
实际场景下,基本是使用软链接。总结区别如下:
- 硬链接不可以跨分区,软链接可以跨分区。
- 硬链接指向一个inode节点,而软链接创建一个新的inode节点。
12. Linux中有哪些文件类型
- 普通文件:存储信息和数据。
- 目录文件
- 符号链接文件:保留了指向文件的地址而不是文件本身。
- 字符设备:用来访问字符设备比如硬盘。
- 设备文件:用来访问块设备。
- 管道文件:一种特殊类型的文件,用于进程间通信。
- 套接字:用于进程间的网络通信。
13. Linux的权限命令
在Linux中,权限一般分为读、写、执行。分为三组,分别对应文件的属主(owner)、属组(group)、和其他用户(other)。
Linux中的权限分为以下几种
- r:代表权限是可读,用数字4表示
- w: 代表权限是可写,用数字2表示
- x: 代表权限可执行,用1表示
14. Linux如何进行用户管理以及用户组管理
- useradd 选项 用户名. 添加用户账号
- userdel 选项 用户名。删除用户账号
- usermod 选项 用户名 修改账号
- passwd 用户名。更改或创建用户密码
- passwd -S 用户名 显示用户账号密码信息
- passwd -d 用户名 删除用户密码
- groupadd 选项 用户组:增加一个新的用户组
- groupdel 用户组。删除一个用户组
- groupmod 选项 用户组 修改用户组的属性