专题一
程序代码题:程序设计与分析,主要考的是线程,多线程的并发?
大题第一问(1)操作系统的结构有哪几种常用的结构?
宏内核:宏内核是将操作系统的主要功能模块都集中在内核的一种结构。高性能,复杂度高,缺乏灵活性。具体表现在:由于所有的功能都在内核中,模块之间的调用通过函数调用实现,通信开销小,执行效率高。内核代码庞大且复杂,因为包含了众多功能模块,使得内核的开发,维护和调试都比较困难。
微内核:微内核只把操作系统最基本的功能放在内核中,其他功能如文件系统,设备管理等都放在内核之外的空间。高可靠性,良好的拓展性。内核小简单,减少了内核出错的概率,如果用户空间的服务出现故障,不会直接导致整个系统崩溃。可以方便的在用户空间添加新的服务。
混合内核:混合内核结合了宏内核和微内核的特点,它在内核中保留了较多的功能,但又采用了微内核的一些设计理念,如将部分功能模块进行了分离和模块化处理。性能与拓展性的平衡,复杂性适中。
大题第二问(2)Linux源码从git中如何下载(题干中源码的链接给了)?拓展一下git常用方法,git怎么用,分支管理,创建......
在下载源码之前,需要确保系统已安装 Git。如果未安装,可以通过以下方式安装
sudo
apt- get
install
git
克隆远程仓库: git clone <repository rul> 远程仓库的地址(URL)
创建并切换到新分支: git checkout -b <branch name>
仅创建分支:如果只想创建分支而不切换: git branch <branch name>
合并分区:git merge <source branch>
大题第三问(3)对于Linux是典型的宏结构,但是它仍然把微内核的优势引用进来,动态的内核加载机制,可以动态加载,加载的步骤是什么?
只需要写核心的步骤:第一步编写内核,第二步进行编译,第三步编译之后加载内核,第四步加载完成后还可以进行卸载。
专题二 虚拟化(主要是虚拟处理器)
大题第一问(1)给你一组实验数据,这个实验数据是上课做过的,让你计算cpu的个数,物理cpu和逻辑cpu的个数。
大题第二问(2)得出是有多颗cpu的,多核的,再给你一组数据,查看有几个进程,请把这俩个进程绑定到指定的逻辑cpu上,怎么处理?
专题三:虚拟化(包含虚拟化的内存)
大题第一问(1)对着程序输出结果找到相应的地址段就行
大题第二问(2)还需要解释.bss .data .rodata .text的含义:
.text段通常存放程序的可执行代码,它是可读的,因为在程序运行的过程中,代码本身通常是不会被修改的。
.data段存放的是已经初始化的全局变量和静态变量(非零初始化)
.rodata段存放的是只读数据,例如字符串常量,被const修饰的全局变量等
.bss段存放的是未初始化的全局变量和静态变量
PS:初始化赋值为0的变量属于.bss段
大题第三问(3)内存管理中相应的又分为动态分区和静态分区,其中堆和栈的区别是什么?
堆是一种无序的数据存储区域,更像是把数据随意的堆放在一块大的内存空间里,数据的存储和释放并没有像栈那样固定的顺序。堆的内存空间大小相对于栈来说要大的多,它通常是可以动态扩展的。堆的数据访问速度相对于栈要慢一些。
栈是一种后进先出的数据结构。在内存中,栈的生长方向是从高地址向低地址进行的,数据的存入和取出操作都是在栈顶进行,新的数据入栈时会被压入栈顶,而数据出栈时也是从栈顶取出相应的数据。栈的大小通常是有限的,并且相对较小。栈的数据访问速度通常比较快。因为栈的内存分配和释放操作简单且有规律。