操作系统最强面经面试题总结 | 春招秋招必备 | Offer收割

操作系统面试题总结

此篇博客为我的春招面试题总结,阅读最新最全版本,请关注我的个人网站:zongchengma.github.io,不定期更新各类文章和程序员读书笔记。

操作系统引论

操作系统的特性(并共虚异)
  1. 并发:同一段时间内多个程序执行
  2. 共享:系统中的资源可以被内存中多个并发执行的进线程共同使用
  3. 虚拟:通过时分复用以及空分复用(如虚拟内存),把一个物理实体虚拟为多个
  4. 异步:系统中的进程是以走走停停的方式执行的,且以一种不可预知的速度推进
操作系统的主要功能
  1. 进程管理

    进程控制,进程同步,进程通信和进程调度

  2. 内存管理

    内存分配,内存保护,地址映射,内存扩充

  3. 设备管理

    管理所有外围设备,包括完成用户IO请求,为用户进程分配IO设备,提高IO设备利用率,提高IO速度,方便IO使用

  4. 文件管理

    管理用户文件和系统文件,方便使用的同时保证安全性。包括磁盘存储空间管理,目录管理,文件读写管理以及文件共享及保护

  5. 提供用户接口

    程序接口(如API)和用户接口(如GUI)

各种操作系统的区别
  1. 批处理操作系统:成批处理、系统吞吐量高、资源利用率高、用户不能敢于作业的执行
  2. 分时操作系统:多路性、独立性、及时性、交互性
  3. 实时操作系统:及时响应、快速处理、高可靠性和安全性、不要求系统资源利用率

操作系统的主要组成部分:进程和线程的管理、存储管理、设备管理、文件管理

动态链接库与静态链接库的区别

静态链接库是.lib格式的文件,一般在工程的设置界面加入工程中。程序编译时,会把lib文件代码加入到程序中,因此会增加代码大小。不能手动移除lib代码。

动态链接库是程序运行时动态装入内存的模块,格式为.dll,在程序运行是可以随意加载和移除,节省内存空间。

此篇博客为我的春招面试题总结,阅读最新最全版本,请关注我的个人网站:zongchengma.github.io,不定期更新各类文章和程序员读书笔记。

进程与线程

进程和线程,以及它们的区别
  1. 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位
  2. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位
  3. 一个进程可以有多个线程,多个线程可以并发运行
  4. 线程基本不拥有系统资源,只拥有一些在运行中必不可少的资源,比如程序计数器、寄存器和栈
  5. 但线程可以与其他线程共享进程所拥有的全部资源
  6. 线程可以创建和撤销另一个线程
协程

线程:抢占式调度

协程:协同式调度,避免了无意义的调度,可以提高性能,但程序员必须要自己承担调度的责任。协程也失去了标准线程使用多CPU的能力。

用户态和核心态

运行在用户态下的程序,只能受限地访问内存,不允许访问外围设备。占用CPU的能力被剥夺,CPU资源可以被其他程序获取。

运行在内核态下的程序,可以访问内存所有数据,包括外围设备。

用户态切换到内核态的三种方式:

  1. 系统调用:用户态进程主动要求切换到内核态的一种方式。用户态进程通过系统调用,申请使用操作系统提供的服务程序,以完成工作。
  2. 异常:当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,会触发由当前运行进程切换到处理此异常的内核相关程序中。因此也就转到了内核态,比如缺页异常。
  3. 外围设备终端:外围设备完成用户请求的操作后,会像CPU发送相应的中断信号。此时,CPU会暂停执行下一条即将要执行的指令,转而执行与中断信号对应的处理程序。如果先前执行的指令是用户态的程序,那么转换的过程自然就发生了由用户态到内核态的转换。
程序和进程的区别
  1. 程序是一个静态概念,进程是一个动态概念
  2. 程序没有并行特征,而进程有并行特征
  3. 程序不会竞争计算机系统资源,而进程是竞争计算机系统资源的基本单位
  4. 不同的进程可以包含同一程序,只要该程序所对应的数据集不同
多线程共享什么数据
  • 进程代码段
  • 进程的公有数据
  • 进程打开的文件描述符
  • 信号的处理器
  • 进程的当前目录
  • 进程用户ID与进程组ID

此篇博客为我的春招面试题总结,阅读最新最全版本,请关注我的个人网站:zongchengma.github.io,不定期更新各类文章和程序员读书笔记。

线程同步的方式
  1. 信号量

    允许统一时刻多个线程访问同一个资源,但需要控制统一时刻访问此资源的最大线程数量

  2. 互斥量

    实际上是信号量的一种特殊情况,允许统一时刻只有一个线程访问同一个资源

  3. 信号,也叫事件

    通过通知操作的方式来保证多线程同步,还可以方便实现多线程优先级的比较操作

多线程锁实现多线程同步
  1. 互斥锁

    保护临界区,确保同一时间,只有一个线程访问数据。

    如果互斥量已经上锁,调用线程会阻塞,直到互斥量被解锁

  2. 自旋锁

    在获取到锁之前,一直处于循环检测保持者是否已经释放了锁。

    与互斥锁的区别是,在申请自旋锁时,线程处于忙等状态,而非挂起状态

  3. 信号量

    一个计数器,用来控制多个进程对共享资源的访问。

    互斥锁为信号量的一个特殊情况。

  4. 读写锁

    高级别锁,区分读和写,符合条件时,允许多个线程访问对象。

    处于读锁时,允许其他线程和本线程的读锁,但不允许写锁。

    处于写锁时,任何锁操作都会睡眠等待

  5. 递归锁

  • 31
    点赞
  • 271
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
链表逆转的空间复杂度为O(1)。要实现链表逆转,可以使用三个指针,分别指向当前节点、前一个节点和后一个节点。首先将当前节点的下一个节点保存起来,然后将当前节点的指针指向前一个节点,再将前一个节点的指针指向当前节点,最后将当前节点的指针指向保存的下一个节点。通过不断移动指针,可以实现链表的逆转操作。这个过程只需要使用三个指针,不需要额外的空间来存储中间结果,因此空间复杂度为O(1)。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [分别找出A链表中大于0和小于0的值,并且将链表进行逆转,不额外开辟空间,要求空间复杂度为O(1)](https://blog.csdn.net/qq_53213071/article/details/127117688)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [世界500强面试题.pdf](https://download.csdn.net/download/qq_33522040/11949820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值