C++面试问题总结 3


/* 用户态与内核态之间如何切换? */


系统为了限制不同程序的访问能力,防止它们获取别的内存数据,划分了两个等级  内核态与用户态

内核态:CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序

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


以下情况会从用户态切换到内核态:

1. 系统调用

用户态进程主动要求进入内核态的一种方式,用户态的进程通过系统调用申请操作系统提供的服务完成工作

2. 异常

用户态的进程运行过程中产生了一个未知的异常,此时将进入内核态调用操作系统内核的异常处理程序

3. 外设中断

当外设完成用户请求后,会向CPU发送相应的中断信号,这时CPU会暂停执行下一条指令转而执行中断对应的处理程序;若之前执行的是用户态的指令,则此时切换至内核态


/* 两个进程之间如何切换?*/


假设当前系统中只有两个进程运行

1. 进程A时间片用尽返回就绪,进程B运行

2. 进程A等待某事件(I/O、同步)陷入阻塞,进程B运行



/* 写时拷贝会不会影响 全局变量区、局部变量区、堆区? */


当父(子)进程中某个变量的值被改变时,该变量所在页会拷贝一份在子(父)进程中,而不是完全将数据域拷贝


/*
------------------------------------------------------------------------------------------
*/


/* 互斥锁、自旋锁的区别? */


当一个线程去获得临界资源时,此时这个资源被另一个线程所占有

互斥锁:该线程阻塞,进入等待队列,直到资源被释放;

自旋锁:该线程不会陷入阻塞,而是不停的循环请求获取资源,直到资源被释放;


/*
------------------------------------------------------------------------------------------
*/


/* 可变参数中形参的入栈占用空间? */



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值