操作系统知识点梳理

本文深入探讨了操作系统中的进程线程切换流程,包括从用户态到内核态的转换,以及上下文切换的细节。讲解了进程在虚拟地址空间的分区,堆栈的区别,并阐述了操作系统为何区分内核态和用户态。此外,详细介绍了内存管理中的页表和页目录,以及虚拟地址到物理地址的映射。最后,讨论了并发请求处理、IO多路复用、进程间通信方法、死锁避免策略、进程调度算法和磁盘调度算法等核心概念。
摘要由CSDN通过智能技术生成

操作系统

内存管理

简述进程线程切换的流程

如果想要从A进程切换到B进程,必定要先从用户态切换到内核态,因为这个切换工作是由操作系统完成的,操作系统需要先挂起正在占用CPU的A进程,才能切换到B进程。
由于从用户态切换到内核态的时候,CPU是在用户进程手中,所以这个是通过硬中断来实现的。再从用户态切换到内核态之前需要首先保存用户进程的上下文,以便下一次执行是可以继续之前的工作。
这个上下文就是进程的执行环境,包括所有的寄存器变量进程打开的文件内存信息等。一个进程的上下文可以分为用户级上下文寄存器上下文系统级上下文。用户级上下文存储的是用户进程的内存数据和堆栈数据等;寄存器上下文是一些通用寄存器;系统级上下文是内核栈PCB(进程控制块)等

进程在地址空间会划分为哪些区域

我来简单讲一下把文件加载到内存中的一个过程,以Windows为例,PE文件中有一个叫节的概念,节是PE文件中存放代码和数据的基本单元,用以存储不同类型的数据,比如data节、code节等,一个节的所有原始数据必须加载到连续的内存地址空间,这也就造成了在虚拟地址空间中的区块划分
在虚拟地址空间中会按节划分为代码段数据段未初始化的数据段以及堆栈这些区块。

堆和栈有什么区别

我们常说堆栈堆栈,其实堆和栈是两个不同的概念,最直观的理解,堆是由用户控制的,Java中可以用new关键字在堆中申请内存来实现内存分配,c语言是用malloc,而栈是由操作系统控制的,在栈中存储的是这个进程的局部变量等,比如我们用new关键字来申请一块内存,内存本身是在堆中开辟的,而指向内存的指针是存储在栈中的。

操作系统为什么分内核态和用户态,这两者如何切换

因为在CPU的指令中,有一些是非常危险的,比如清理内存、设置时钟等,如果所有的程序都能使用,就有可能造成程序崩溃,所以CPU将指令分为特权指令和非特权指令,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值