(本题 8 分)某系统中进程的虚拟地址空间包括内核区、用户栈、运行时堆、可读写数据段、只读代码段等区域,其布局如图所示,图中阴影部分表示未占用区域。现有 C 语言程序的部分代码如下:
char*ptr;
void main()
{
int length;
ptr=(char *)malloc(100);
scanf("%s", ptr);
length=strlen(ptr);
printf("length=%d\n", length);
free(ptr);
}
请回答下列问题:
(1)上述程序执行时,其进程控制块位于哪个区域?执行 scanf () 等待键盘输入时,该进程处于什么状态?(2 分)
(2)main () 函数的代码位于哪个区域?其直接调用的哪些函数的功能需要通过执行驱动程序实现?(3 分)
(3)变量 ptr 被分配在哪个区域?若变量 length 没有被分配在寄存器中,则会被分配在哪个区域?ptr 指向的字符串位于哪个区域?(3 分)
(1)进程控制块位于内核区;该进程处于阻塞态。
(2)main () 函数的代码位于只读代码段;scanf () 和 printf () 的功能需要通过执行驱动程序实现。
(3)ptr 被分配在可读写数据段中;length 会被分配在用户栈中;ptr 指向的字符串位于运行时堆中。