网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
-
操作系统线程
- 典型问题:
- 简述进程和线程的区别
- 以下内容带您一步步了解
- 比进程更小的独立运行的基本单位-线程(Threads)
- 线程的提出主要是为了提高系统内程序并发执行的程度,从而进一步提升系统的吞吐量,充分发挥多核CPU的优越性而设计的
- 引入进程是为了操作系统更加方便地管理程序,使得多个程序能并发管理和执行
- 而线程则是为了减少程序在并发执行时的开销,并且提高程序内程序并发执行的程度
- 从从属关系来看,一个进程对应多个线程,线程是从属于某一进程的
- 线程的一大特点
- 轻装上阵
- 在一些地方称其为轻量级进程
- 不管在调度,切换,运行都比进程更加轻量
- 线程是操作系统进行运行调度的最小单位
- 包含在进程之中,是进程中实际运行工作的单位
- 一个进程可以并发多个线程,每个线程执行不同的任务
- 线程强调的是运行
- 进程强调的是资源分配
- 进程的线程共享进程资源
- 因为操作系统在进行资源分配时并不是以线程为单位的,而是以进程为单位
- 线程本身是不拥有资源的
- 典型问题:
- 简述操作系统的内核态
- 简述进程什么时候进入内核态
- 以下内容带您一步步了解
- 有处理器资源,IO设备资源,存储器资源,文件资源等等
- 这些资源都是交给操作系统去直接管理的,用户是不能直接接触到的,都是通过操作系统提供的接口来处理的
- 为了屏蔽用户可能对计算机所造成的影响,操作系统就把操作系统的状态分为内核态和用户态2个部分
- 关键的程序就运行在内核态
- 用户所编写的程序在没有必要的情况下一般都是运行在用户态
- 以Linux作为例子
- Linux设计的哲学
- 对不同的操作赋予不同的执行等级
- 与系统相关的一些特别关键的操作必须由最高特权的程序来完成
- 内核是操作系统的内部核心程序,它向外部提供了对计算机设备的核心管理调用
- 我们将操作系统的代码分成2部分
- 内核所在的地址空间称作内核空间
- 内核空间:存放的是内核代码和数据
- 内核态一般指的是运行在内核空间的程序和代码的状态
- 当执行到内核空间的一段代码时,我们称程序处于内核态
- 内核态下的程序可以访问所有资源和设备
- 在内核以外的统称为外部管理程序,它们大部分是对外围设备的管理和界面操作
- 外部管理程序与用户进程所占据的地址空间称为用户(外部)空间
- 当程序执行到外部空间代码时,我们称程序处于用户态
- 在此状态下,执行的代码被硬件限定,不能进行某些操作,以防止给操作系统带来安全隐患
- 从用户态切换到内核态主要有3种情况:
- 系统调用
- 操作系统管理资源时为我们提供了很多接口,通过这些接口就可以操作这些资源
- 这些接口就可以理解为系统调用
- 所有用户程序都是运行在用户态,但是有时候这些用户态的程序也需要做一些内核态的事情
- 比如说从硬盘读取数据,从网卡里读写数据,这些都只能由操作系统来完成
- 这时就要通过系统调用的操作来把这些工作交给操作系统去执行
- 进行了系统调用后,当前用户程序就会由用户态切换到内核态去执行
- 当系统调用完成后,会返回数据,用户态程序拿到数据后,它又返回到用户态来继续执行
- 异常中断
- 如CPU在执行用户态程序时突然发生了一些不可预知的事件如内存不存在,当前访问程序出现异常等
- 异常只能由操作系统去管理,这时进程就会由用户态切换到内核态,让操作系统去处理相关异常事件
- 外围设备中断
- 在读写外围设备时,如果说外围设备在完成工作之后,它可以给CPU发出中断信号,可以暂停当前需要执行的指令,转而去执行中断信号对应的处理程序
- 如暂停当前需要执行的指令的程序是用户态的程序的话,那么它处理外围设备中断时就会转为内核态去执行
- 著名事件Intel meltdown漏洞
- 就是由于通过漏洞跳过以上3种步骤进行了切换,越权,使得用户程序也可以拥有最高的执行权限
- 典型问题:
- 举例说明什么是IO密集型任务
- IO密集型任务部署时,应该注意什么
- 以下内容带您一步步了解
- 也称为CPU密集型
- 完成一项任务的时间取决于CPU的速度
- 特点:
- CPU利用率高,并且运行时很可能导致别的程序处理慢的情况
- 对处理器资源(高频使用)要求很高,对于其它资源(低频使用)要求较低
- 计算1024000的阶乘就是典型的计算密集型的任务
- 完成一项任务的时间取决于IO设备的速度
- 特点:
- 频繁读写网络、磁盘等任务都属于IO密集型任务
- 即磁盘的读取数据和输出数据非常大的时候就属于IO密集型
- CPU利用率低,大部分时间在等待设备完成
- 这是由于IO操作的运行时间远远大于CPU、内存运行时间,所以任务的大部分时间都是在等待IO操作完成
- 对存储器资源(高频使用)要求很高,对于其它资源(低频使用)要求较低
- 往磁盘写入10G的文件就是个典型的IO密集型
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
/bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!