操作系统面试题

这篇具有很好参考价值的文章主要介绍了操作系统面试题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

存储器通过什么和CPU进行数据交互?
计算机存储数据寻址数据的内存单位是多少?
32位操作系统和64位操作系统到底什么区别?

任务调度
linux调度的对象是什么?
task_struct

软中断和硬中断
应该先说硬中断再说软中断
什么是中断,中断是谁产生的,谁接收中断并进行什么操作?
网卡接收到数据包,将数据包方法内存之后,通过什么方法通知内核有数据包到达?
硬件触发中断——操作系统执行前部分的硬中断处理程序,快速处理中断——内核触发软中断执行软中断处理程序,处理本次中断没完成的处理。
也就是说由硬件产生的一个中断要分两部分中断处理程序完成。

操作系统为什么需要内存管理?

内存管理方式:分段和分页。

1,充分利用有限的内存:内存是有限的,使用内存管理可以更好的使用有限的内存,比如分页可以减少外部内存碎片;

2,更安全的管理内存:内存管理的方式,比如段表中的段大小可以内存越界,页表中的读写权限可以提高内存的访问的安全性;

3,虚拟内存可以防止进程之间的地址冲突。

虚拟内存有什么作用?

1,进程之间有各自的虚拟内存,可以防止进程地址冲突,比如数据覆盖;

2,虚拟内存中的段表中的段大小,页表中的读写权限,为地址访问提供了更好的安全性。

多级页表为什么可以减少占用物理内存空间?

如果使用了二级分页,一级页表就可以覆盖整个 4GB 虚拟地址空间,但如果某个一级页表的页表项没有被用到,也就不需要创建这个页表项对应的二级页表了,即可以在需要时才创建二级页表,那么页表占用的内存就会更小。

单级页表中每一个页表项保存的是什么:每一个内存页的起始地址。

多级页表中,一级页表保存的是什么:存储的是二级页表的每一个页的起始地址。

二级页表保存的是什么:存储的是内存页的起始地址。

二级页表和单级页表的一级页表的关系:

存储的页表项都是一样的,也就是存储的都是内存页的起始地址作为一个页表项,只是二级页表是多个页表,32位系统下是4MB/4KB=1024,也就是有1024个二级页表(不一定都创建)。

malloc中brk和mmap内存开辟和释放的区别
free怎么知道要释放多大的内存 16

堆和栈的三种区别

1,用户还是操作系统开辟释放内存;

2,数据进出方式;

3,内存开辟从高到低或者从低到高。

当进程运行CPU填充页表分配物理内存时,如果没有足够的空闲物理内存,内核会怎么办?
后台线程异步回收——不够——内核直接听不回收——还是不够——OOM
哪些物理内存可以被回收

在4GB的物理内存上申请8GB的内存会怎么样?
首先要明白申请的是什么内存,再谈能不能申请
32位系统可以分配吗,64位呢?为什么系统只有4G物理内存,64位系统却可以分配呢?
linux怎么查看一个进程使用的虚拟内存的大小和物理内存的大小
那64位系统可以申请128TB内存吗?
不一定,还得看你自己的物理内存够不够大,因为申请虚拟内存时也会使用到物理内存,如果物理内存使用完了还没有分配好虚拟内存就会触发OOM。
swap机制
swap out
swap in
申请的虚拟内存大于物理内存也没关系,只要使用虚拟内存时不是全部使用,映射的物理内存足够就不会出现问题,如果映射的物理内存不够就会OOM。

你知道为什么磁盘沙沙响吗?
IO频率太高

mysql从磁盘读取的页存储在buffer pool中,linux从磁盘读取的页存储在哪?
什么是预读原理:
本来只需要读一个页,但是这个页附近的多个页都一起读了。
linux和mysql都是以页作为IO的单位。
linux和mysql缓存污染的相同点和区别。

PCB是什么
进程切换时,CPU此时的上下文保存在哪?
CPU上下文切换需要切换至少哪两部分:
CPU寄存器和程序计数器。
CPU上下文切换包括存储和读取两个过程。

CPU上下文切换分为哪三种:
进程的上下文切换
线程上下文切换
中断上下文切换

进程切换和线程切换的区别:
1,进程切换要切换的资源很多,用户空间的虚拟内存,变量等,内核空间的资源。
2,线程切换如果是不同进行的线程就是进程切换,如果是同一个进程的线程,只要切换线程私有数据,切换简单。

线程的切换分为同进程线程切换和不同进程线程切换
进程每发生一次状态转换,操作系统就会发生一次调度

同步和互斥的区别:

互斥:一个运行,其他的旧不能运行;

同步:一个线程运行的条件受到另一个线程的约束;

进程通信的5种方式;

线程同步和互斥的4种方式;

自旋锁的实现原理,怎么编程实现?---CAS
原子变量值变换的函数参数——指针,新值

自旋锁的缺点:

互斥锁=自旋锁+进程阻塞

占占互等

读写锁=读锁+写锁

读锁=共享,写锁=独占

悲观锁和乐观锁的区别:

悲观锁:先避免冲突,再修改数据。
乐观锁:先改数据,再比较冲突,比如git的版本对比。
乐观锁其实没有加锁

一个进程可以创建多少线程?

4种进程调度算法?

硬链接和软连接

阻塞和非阻塞I/O,同步和异步I/O

多路I/O复用解决了什么问题?

1,解决了需要用户线程不断检测内核是否有数据可读的问题;

2,实现一个进程可以维护多个套接字;

描述一下键盘输入字母A到显示A的整个过程
什么是DMA技术,代替CPU从磁盘控制器将数据开呗到内存,让CPU有空闲事件处理其他任务。
通过两次中断告诉CPU准备好的数据。
为什么要有DMA技术?
CPU一次IO的过程
什么是零拷贝技术:
就是不需要再将数据从内核缓冲区拷贝到用户缓冲区,同时不需要CPU上下文切换。

mmap原理:用户空间映射内核空间,不需要在用户空间和内核空间进行数据拷贝。

read和write执行拷贝发送网络数据的过程?

线程池的运行原理:

线程池是一种用于多线程编程的技术,它的主要原理是将多个线程预先创建并放入一个池子中,当有新的任务需要处理时,就会从池子中取出一个空闲线程来执行任务;当任务执行完毕后,该线程并不被销毁,而是再次回到池子中变为空闲状态,等待下一个任务的分配。


线程池的运行过程
线程个数:一个进程可以创建的线程数量取决于操作系统对线程数量的限制。
多线程怎么操作
线程池的作用:

1. 提高程序性能:线程池可以提高程序的性能和响应速度,通过重复利用已经创建的线程,避免了每次执行任务时新建线程所带来的性能开销,提高了程序的相应速度。

2. 减少资源的浪费:线程池可以避免过多创建线程,降低了系统资源的占用,避免了资源的浪费。

3. 统一管理:线程池可以统一管理创建的多个线程,提高了线程的可控性和可管理性,避免了多个线程之间相互干扰的问题,方便了复杂程序的协调和调试。

三个线程A、B、C分别打印1-100,A打印3的倍数,B打印5的倍数,C打印其他数。不能重复

单核CPU最多创建多少个线程?

一个相同创建的线程数量和这个操作系统的内存大小和系统参数有关;

一个进程能打开多少个文件句柄

一个进程能打开的文件句柄数量取决于操作系统和文件系统等因素,一般来说,它可以由系统管理员通过修改系统参数进行调整。以下是一些常见操作系统的默认值:

- Linux:默认每个进程可以打开最多1024个文件句柄,可以通过修改 /etc/security/limits.conf 和 /etc/sysctl.conf 等配置文件来扩大此限制。
- Windows:默认每个进程可以打开最多2048个文件句柄,可以通过修改注册表中的 MaxUserPort 和 TcpTimedWaitDelay 等键值来扩大此限制。

服务器可以和多少个客户端建立连接

乐观锁跟悲观锁

悲观锁假定同时只有一个线程可以访问共享资源,因此在访问之前先获取锁,然后进行操作,在操作完成后才释放锁。如果其他线程尝试访问同一资源,它们必须等待锁被释放。悲观锁的协调机制由操作系统提供,开销较大,但是在竞争激烈的环境中,能够保证数据的完整性和一致性。

乐观锁假定同时有多个线程可以访问共享资源,并尝试执行操作,如果没有竞争情况,则操作成功完成;如果发生竞争,则操作失败,需要重新尝试。乐观锁的协调机制由应用程序提供,开销较小,但是在竞争激烈的环境中,容易发生操作失败的情况。

sleep和wait的区别

sleep---线程循环等待,占用CPU资源

wait----线程阻塞,不占用CPU资源

sleep 和 wait 都是用于线程操作的函数,但它们的含义和使用方式有很大不同。

1. sleep

sleep 函数让当前线程休眠一段指定的时间,调用它的线程会停止执行,等到要等待的时间过去后,会被重新唤醒,重新执行。在休眠时间内,线程会占用 CPU 资源,因此不能让其他线程进展。

2. wait

wait 函数常常与条件变量(condition variable)结合使用,用于实现线程间的同步。调用 wait 的线程会立即阻塞,直到其他线程调用了同一个条件变量的 signal 或 broadcast 函数,通知被阻塞的线程可以继续执行。与 sleep 不同的是,wait 不会占用 CPU 资源,在等待的过程中,系统会把调用它的线程挂起,直到被唤醒。

总的来说,sleep 更适用于简单的时间控制,如延迟执行、定时任务等,而 wait 适用于线程之间的同步和协调,如资源互斥、生产者消费者问题等。

需要注意的是,wait 函数调用前需要先加锁,wait 函数内部会释放锁,被唤醒后再次加锁,因此使用 wait 要配合锁使用,确保线程的同步和数据的安全。

NIO和传统IO的区别

NIO (Non-blocking I/O) 和传统 IO (Blocking I/O) 的主要区别如下:

1. 阻塞模式 vs 非阻塞模式

传统 IO 模型是阻塞式 IO,即当数据还没有准备好,线程会一直等待直到数据准备完成。这种方式会导致线程的资源浪费和系统的响应速度较慢。而 NIO 引入了非阻塞式 IO,即线程不会阻塞在 IO 操作上,而是可以同时处理多个 IO 操作,提高了系统的并发性和响应能力。

2. 缓存模式 vs 直接读写模式

传统 IO 模型的读写是基于缓存的,即每次读写时会将数据先放入到缓存区中,再由应用进行操作。这种方式会导致频繁的数据拷贝,降低了数据读写的效率。NIO 引入了直接读写模式,即数据可以直接从文件或网络中读取,而不需要经过缓存,提高了数据读写的效率。

3. 通道操作 vs 流操作

传统 IO 模型是基于流的操作,即数据从一个流中读取或写入到一个流中。而 NIO 引入了通道的概念,即数据可以直接从通道中读取或写入,通道可以双向地读写数据,提高了数据的灵活性和处理效率。

总之,NIO 更适合高并发、高吞吐量的场景,而传统 IO 模型则适合于传输量较小的场景。NIO 的使用也较为复杂,需要考虑到线程、缓存、通道等多个因素,因此在使用时需要充分考虑系统的实际情况和要求。


IO密集型的线程数配置过多会对CPU有什么影响。

什么是CPU密集型任务,什么是I/O密集型任务

CPU密集型任务:任务运行过程中,CPU占用率高,需要进行大量的运算;

IO密集型任务:任务运行过程种CPU占用率小,但是需要大量进行I/O操作。

链接

CPU密集型任务适合使用多进程实现,I/O密集型任务适合用多线程实现,因为

大家一起算;

一致性缓存和一致性哈希

缓存一致性怎么解决

链接

什么是一致性哈希

链接

内存

在物理内存为4G的系统上可以读取16G的文件吗

一次性读取16G大小的文件是读取不了的;解决办法:

1,分批读取,一次读取一小部分,分多次读取即可;

2,开启swap机制。

swap机制

swap机制是用来解决物理内存不足的情况的,不是用来解决虚拟内存不足的情况。

当物理内存不足时:

1,操作系统没有开启swap机制,这个进程就会因为OOM而被kill掉;

2,操作系统开启了swap机制,程序就可以正常运行。

swap机制存在的意义:使得进程可以使用的物理内存远远超过系统的物理内存大小。

swap机制的存在是不是可以使用无限内存

不是,有限制的,当系统回收的内存赶不上进程需要的内存的时候就会OOM,kill进程。

swap的缺点

因为swap机制内存会和磁盘进行数据交换,也就是会阐述IO,而磁盘IO性能又是很低的,所以系统swap时性能不好。

内核态和用户态的进程切换哪个消耗大

内核态,内核态进程需要进行的工作更多,所以切换时需要保存和切换的数据也就更多,兄啊好就更大。

内核态需要进行IO这些操作。文章来源地址https://www.toymoban.com/news/detail-691144.html

到了这里,关于操作系统面试题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++面试 -操作系统-架构能力:磁盘 I/O 性能优化

    目录 缓存优化 异步 I/O 文件系统选择 文件访问模式 内存映射文件(Memory-mapped Files) 顺序读写(Sequential Access) 随机访问(Random Access) 缓存文件内容(Caching) 数据压缩 批量写入和读取 数据对齐 数据缓存                 磁盘 I/O 性能优化在 C++ 面试中可能涉及到的

    2024年03月10日
    浏览(73)
  • 计算机保研面试常见问题(408操作系统简答题)

    1. 操作系统的特点和功能是什么? 答:操作系统的特点是并发、共享、虚拟、异步。其中,并发和共享是操作系统主要的特点。操作系统的功能主要包括:处理机管理、存储器管理、设备管理和文件管理等。操作系统管理计算机的全部软、硬件资源,合理组织计算机的工作流

    2024年02月07日
    浏览(56)
  • C++ Linux Web Server 面试基础篇-操作系统(三、进程通信)

    ⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您, 麻烦点个赞 👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️ Qt5.9专栏 定期更新Qt的一些项目Demo

    2023年04月22日
    浏览(93)
  • C++ Linux Web Server 面试基础篇-操作系统(四、线程通信)

    ⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您, 麻烦点个赞 👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️ Qt5.9专栏 定期更新Qt的一些项目Demo

    2023年04月26日
    浏览(48)
  • 【Linux面试题及答案:了解Linux操作系统、常见发行版及基本命令】

    一、什么是Linux操作系统? 答:Linux是一种开源的操作系统,它基于UNIX操作系统开发而来。Linux具有稳定性、可靠性和安全性的特点,并且可以运行在各种硬件平台上。 二、Linux有哪些常见的发行版? 答:Linux有许多不同的发行版,常见的有Ubuntu、Debian、CentOS、Fedora、Red Hat等

    2024年02月08日
    浏览(48)
  • 计算机复试面试基础知识(八股文)(数据库、数据结构、操作系统、计网、机组等)

    数据库绪论 1、简述三层模式、两级映射,分别有什么作用? 模式(逻辑模式):是数据库中全体数据的逻辑结构和特征的描述,是数据库系统模式结构的中间层,即不涉及数据的物理存储细节,也与具体应用程序开发工具语言无关。 外模式(用户模式):是用户能看见和使

    2023年04月09日
    浏览(110)
  • 2023届计算机保研面试基础专业问题(数据结构、算法、计算机语言、计算机网络、数据库、操作系统、数学)

    以下的专业相关基础问题,是在2022年暑期准备面试过程中,断断续续准备的,最终上岸厦大啦,也希望这些内容对后面准备保研的学弟学妹们有帮助。少即是多、快即是慢,希望大家也不必太焦虑,慢慢来比较快! 堆、栈、队列、链表等数据结构 树:红黑树、二叉树的各类

    2024年02月15日
    浏览(57)
  • 操作系统——操作系统用户界面

    操作系统入门知识合集 目录 3.1操作系统启动过程 3.1.1BIOS和主引导记录MBR 思考题:  3.1.2操作系统的启动过程 思考题: 3.2用户界面 3.2.1用户界面概念  思考题: 3.2.2系统调用 计算机有两种模式: 1.实模式:当计算机刚开机、刚上电、还没有加载操作系统的时候,计算器处于

    2024年02月02日
    浏览(49)
  • 操作系统-笔记-第一章-操作系统的概念

    一、第一章——操作系统的概念 二、第二章——【进程】 二、第二章——【线程】​编辑 二、第二章——【进程调度】 二、第二章——【进程同步与互斥】 二、第二章——【锁】 三、第三章——内存管理 四、第四章——文件管理 五、第五章——输入输出管理 🚀 学习心

    2024年02月12日
    浏览(54)
  • 【操作系统基础】操作系统的分类与发展

    这篇文章是操作系统基础的开始,收录于我是沐风晓月的《操作系统原理》专栏 操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其它软件方便的接口和环境,它是计算机系统中最基本的系统软件。 操

    2023年04月19日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包