操作系统面经八股文

这篇博客深入探讨了操作系统的核心特性,包括并发、共享、虚拟和异步。详细阐述了进程和线程的概念与区别,以及动态链接库与静态链接库的差异。此外,文章还涵盖了内存管理、设备管理、文件管理和用户接口。重点讨论了线程同步的多种方式,如信号量、互斥量和读写锁,以及死锁的产生条件和解决策略。最后,提到了操作系统中用户态和核心态的区别,以及进程通信的各种方法,如管道、信号量和套接字。
摘要由CSDN通过智能技术生成

参考来源:操作系统最强面经面试题总结

操作系统引论

操作系统的特性(并共虚异)

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

操作系统的主要功能

  1. 进程管理

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

  1. 内存管理

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

  1. 设备管理

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

  1. 文件管理

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

  1. 提供用户接口

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

各种操作系统的区别

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

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

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

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

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

进程与线程

进程和线程,以及它们的区别

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

协程

协程(Coroutines)是一种比线程更加轻量级的存在。协程完全由程序所控制(在用户态执行),带来的好处是性能大幅度的提升。
一个操作系统中可以有多个进程;一个进程可以有多个线程;同理,一个线程可以有多个协程。

协程是一个特殊的函数,这个函数可以在某个地方挂起,并且可以重新在挂起处继续运行。
一个线程内的多个协程的运行是串行的,这点和多进程(多线程)在多核CPU上执行时是不同的。 多进程(多线程)在多核CPU上是可以并行的。当线程内的某一个协程运行时,其它协程必须挂起。

  • 线程:抢占式调度

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

协程切换
由于协程切换是在线程内完成的,涉及到的资源比较少。不像内核级线程(进程)切换那样,上下文的内容比较多,切换代价较大。协程本身是非常轻巧的,可以简单理解为只是切换了寄存器和协程栈的内容。这样代价就非常小。

协程切换的问题
实际上协程只有在等待IO的过程中才能重复利用线程,也就是说协程本质是通过多路复用来完成的。但是有个问题是,协程本身不是线程,只是一个特殊的函数,它不能被操作系统感知到(操作系统只能感知到进程和内核级线程),如果某个线程中的协程调用了阻塞IO,那么将会导致线程切换发生。因此只有协程是不够的,是无法解决问题的。还需要异步来配合协程。
因此,实际上我们可以把协程可以看做是一种用户级线程的实现。
协程+异步才能发挥出协程的最大作用

协程的使用

  • 计算型的操作,利用协程来回切换执行,没有任何意义,来回切换并保存状态 反倒会降低性能。
  • IO型的操作,利用协程在IO等待时间就去切换执行其他任务,当IO操作结束后再自动回调,那么就会大大节省资源并提供性能,从而实现异步编程(不等待任务结束就可以去执行其他代码)。

用户态和核心态

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

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

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

  1. 系统调用:用户态进程主动要求切换到内核态的一种方式。用户态进程通过系统调用,申请使用操作系统提供的服务程序,以完成工作。
  2. 异常:当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,会触发由当前运行进程切换到处理此异常的内核相关程序中。因此也就转到了内核态,比如缺页异常。
  3. 外围设备终端:外围设备完成用户请求的操作后,会像CPU发送相应的中断信号。此时,CPU会暂停执行下一条即将要执行的指令,转而执行与中断信号对应的处理程序。如果先前执行的指令是用户态的程序,那么转换的过程自然就发生了由用户态到内核态的转换。

程序和进程的区别

  1. 程序是一个静态概念,进程是一个动态概念
  2. 程序没有并行特征,而进程有并行特征
  3. 程序不会竞争计算机系统资源,而进程是竞争计算机系统资源的基本单位
  4. 不同的进程可以包含同一程序,只要该程序所对应的数据集不同

多线程共享什么数据

<
### 回答1: Python面经八股文是指在面试过程中经常会被问到的一些关于Python语言的基础知识问题。这些问题常常是考察面试者对Python语法、数据类型、函数库等方面的理解和应用。 第一个问题通常是问到Python的特点,比如动态语言、解释型语言等。随后可能会问到Python的命名规范,如变量名、函数名等的命名规则。 接下来可能会被问到Python的数据类型,如字符串、列表、字典和元组的特点和用法。还会询问如何进行类型转换和切片操作。 然后可能会被问到Python的函数,包括如何定义函数、函数参数的类型和默认值,以及如何调用函数和返回值等。 接着可能会被问到Python的模块和库的使用,如time、datetime、random等常用模块的函数和方法。还可能问到如何处理文件、异常等知识点。 另外,面试者还可能会被问到Python的面向对象编程的相关知识,如类和对象的概念、实例化对象、继承和多态等。 最后,可能会被问到Python的常用框架和库,如Django、Flask和NumPy等。还可能会问到如何进行数据库操作、网络编程等相关知识点。 在面试中回答这些问题需要准备充分,对Python的基础知识和常用库要熟悉,并能够清晰地表达自己的观点和经验。同时也可以结合项目经验等实际经历进行回答,展示自己的实际应用能力。 ### 回答2: Python面经八股文主要包括以下几个方面: 一、Python基础知识: 1. 数据类型:了解Python中的常见数据类型,包括字符串、列表、元组、字典等,并能灵活运用。 2. 控制结构:熟悉Python的控制结构,如条件语句、循环语句和异常处理等,并能正确使用。 3. 函数和模块:了解函数和模块的概念,在项目中能够定义并调用函数,以及导入和使用模块。 4. 文件操作:了解Python中的文件操作方法,能够对文件进行读写操作。 5. 面向对象编程:理解面向对象编程的概念,能够定义类、创建对象,并掌握继承、多态等特性。 二、Python常用库和框架: 1. Numpy:了解Numpy库的基本用法,包括数组的创建和操作,矩阵运算等。 2. Pandas:熟悉Pandas库的数据处理功能,包括数据的读取、清洗、排序、合并等。 3. Matplotlib和Seaborn:掌握Matplotlib和Seaborn库用于数据可视化的操作,能够生成各种统计图表。 4. Scikit-learn:熟悉Scikit-learn库的机器学习算法,能够进行数据预处理、特征工程和模型训练等。 三、数据库操作: 1. SQL语言:了解SQL语言的基本语法,能够编写简单的SQL查询语句,实现数据的增删改查等操作。 2. MySQL或MongoDB:了解MySQL或MongoDB数据库的基本操作,包括连接数据库、创建表、插入数据等。 3. ORM框架:熟悉Django或SQLAlchemy等ORM框架的使用,能够进行数据库的ORM操作。 四、Web开发: 1. Flask或Django:了解Flask或Django框架的基本使用方法,能够搭建简单的Web应用。 2. RESTful API:熟悉RESTful API的设计原则,能够使用Flask或Django开发和部署API接口。 3. HTML和CSS:掌握基本的HTML和CSS知识,能够进行网页布局和样式设计。 总结起来,Python面经八股文主要包括Python基础知识、常用库和框架、数据库操作以及Web开发等内容。熟练掌握这些知识点,能够在面试中展现出扎实的编程基础和项目经验,提高自己的面试竞争力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何处微尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值