Day01
1. 说一说常用的 Linux 命令
- cd:切换当前目录
- ls:查看当前文件与目录
- grep:通常与管道命令一起使用,用于对一些命令的输出进行筛选加工
- cp:复制文件或文件夹
- mv:移动文件与文件夹
- rm:删除文件或文件夹
- ps查看进程情况
- kill:杀死进程
- tar:对文件进行打包
- cat:查看文件内容
- top:查看操作系统的信息,如进程、CPU占用率、实时内存信息等
- free:查看内存使用情况
- pwd显示当前工作目录
2. 静态库和动态库如何制作及使用,区别是什么
- 静态库:在linux下命名为libxxx.a,在Windows下命名为libxxx.lib
- 动态库:在linux下命名为libxxx.so,在Windows下命名为libxxx.dll,动态库使用需要有库文件和头文件,编译程序时通过“-l 动态库名"参数进行编译。在运行程序之前还需要配置动态库的加载路径,程序才能够正常运行
- 区别:静态库gcc进行链接时,会把静态库中的代码打包到可执行程序中,编译时加载;发布程序时无需提供静态库,移植方便;但是消耗内存,更新部署发布麻烦;动态库gcc进行链接时,动态库的代码不会被打包到可执行程序中,运行时加载;发布程序时需要提供动态库;内存占用小,更新部署发布简单
3. 说一说进程调度算法有哪些
- FCFS,先来先服务算法,对长作业有利
- 短作业优先调度算法:对长作业不利,容易导致饥饿现象,平均周转时间最少
- 优先级调度算法:分为抢占式和非抢占式,一般系统进程大于用户进程,交互进程大于非交互进程,I/O进程大于计算型进程
- 高响应比调度算法:综合考虑等待时间和估计运行时间,响应比等于
(等待时间+要求服务时间)/要求服务时间
- 时间片轮转调度算法:就是在先来先服务的基础上加上时间片的机制
- 多级队列调度算法:按照进程的属性和类别采用不同的调度策略建立多个调度队列
- 多级反馈队列调度算法:有多个队列,队列之间采取剥夺式优先级调度算法,队列之内采用时间片轮转调度算法,优先级越高的队列单个时间片越小。这种设计可以使高优先级的任务更快地获得CPU时间,从而提高系统对于紧急任务或需要快速响应的任务的效率。
4. 说一说什么是大端、小端,如何判断大端和小端
- 大端存储模式:数据的低位保存在内存中的高地址中,数据的高位保存在内存中的低地址中
- 小端存储模式:数据的低位保存在内存中的低地址中,数据的高位保存在内存中的高地址中
如何判断大小端模式:
int main()
{
short big = 0xff00;
char litter = big;
if (litter == 0xff)
{
cout << "大端" << endl;
}
else
{
cout << "小端" << endl;
}
return 0;
}
5. 什么是孤儿进程,什么是僵尸进程,如何解决僵尸进程
- 孤儿进程:孤儿进程是指一个父进程退出后,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并且由init进程对他们完成状态收集工作,孤儿进程一般不会产生任何危害
- 僵尸进程:僵尸进程是指一个进程使用fork()函数创建子进程,如果子进程退出,而父进程并没有调用wt()或者wtpid()系统调用取得子进程的终止状态,那么子进程的进程描述符依然保存在系统中,占用系统资源,这种进程成为僵尸进程
- 为了防止产生僵尸进程,在fork()子进程后我们要及时在父进程中使用wt()或者wtpid()系统调用,等子进程结束后,父进程回收子进程PCB的资源。同时,当子进程退出的时候,内核都会给父进程一个SIGCHLD信号,所以可以建立一个捕获SIGCHLD信号的信号处理函数,在函数体中调用wt()或wtpid(),就可以清理退出的子进程。