/* 用户态与内核态之间如何切换? */
系统为了限制不同程序的访问能力,防止它们获取别的内存数据,划分了两个等级 内核态与用户态
内核态:CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序
用户态: 只能受限的访问内存, 且不允许访问外围设备. 占用CPU的能力被剥夺, CPU资源可以被其他程序获取
以下情况会从用户态切换到内核态:
1. 系统调用
用户态进程主动要求进入内核态的一种方式,用户态的进程通过系统调用申请操作系统提供的服务完成工作
2. 异常
用户态的进程运行过程中产生了一个未知的异常,此时将进入内核态调用操作系统内核的异常处理程序
3. 外设中断
当外设完成用户请求后,会向CPU发送相应的中断信号,这时CPU会暂停执行下一条指令转而执行中断对应的处理程序;若之前执行的是用户态的指令,则此时切换至内核态
/* 两个进程之间如何切换?*/
假设当前系统中只有两个进程运行
1. 进程A时间片用尽返回就绪,进程B运行
2. 进程A等待某事件(I/O、同步)陷入阻塞,进程B运行
/* 写时拷贝会不会影响 全局变量区、局部变量区、堆区? */
当父(子)进程中某个变量的值被改变时,该变量所在页会拷贝一份在子(父)进程中,而不是完全将数据域拷贝
/*
------------------------------------------------------------------------------------------
*/
/* 互斥锁、自旋锁的区别? */
当一个线程去获得临界资源时,此时这个资源被另一个线程所占有
互斥锁:该线程阻塞,进入等待队列,直到资源被释放;
自旋锁:该线程不会陷入阻塞,而是不停的循环请求获取资源,直到资源被释放;
/*
------------------------------------------------------------------------------------------
*/
/* 可变参数中形参的入栈占用空间? */