最近学习操作系统原理,然后想结合具体的程序来理解进程状态是如何切换以及资源分配问题。
例如如下代码:
#inlcude <stdio.h>
#include <stdlib.h>
int main(){
printf("Welcome!");
int a=5;
int b;
scanf("%d",&b);
char* c=(char*)malloc(255);
strcpy(c,"this is a string to be copied.");
return 0;
}
上述程序随手写的,我想问的是,当编译连接生成.exe文件后,双击程序运行时,程序中一些变量的分配,I/O操作是如何完成的?还有I/O操作时等待输入时会阻塞,这时进程状态切换过程是怎样的?
具体问题如下:
1.操作系统原理中提到:进程由新建状态变为就绪状态要申请相应的资源,那么这里申请到的资源包括代码中a变量的内存空间,包含c指向的动态开辟区间吗?
我的理解:应该是不包含的,申请的进程资源应该是PCB、程序驻留空间等。.exe文件对于操作系统来说就是一组执行指令,在执行过程中操作系统再开辟分配相应的变量空间,不知道我的理解对不。
2.printf对I/O设备的输出,操作系统是如何完成的?
这个不用介绍底层原理,从进程中断、进程状态转换的角度来说就行。
3.执行scanf函数(此时对应的是一组系统指令吗?)时,进程会阻塞,系统如何判断输入完成呢?
通过输入的回车换行符号吗?我想问的是,这时系统的中断过程,以及相应的进程状态转换过程是怎样的。
4.由操作系统的角度看,在操作系统的内存中,.exe程序是按照代码那样的顺序执行吗?
虽然以及编写了一段时间的程序,但对.exe具体是什么竟然不理解,希望大家能解答下。
谢谢了。