2020-2021-1 20209305 《Linux内核原理与分析》第三周作业

1.函数是如何传递返回值的

    保存返回值和返回地址的方式、保存返回值,就是程序用EAX寄存器来保存返回值。如果有多个返回值,EAX寄存器返回的是一个内存地址,
  这个内存地址里面可以指向很多的返回数据,EAX寄存器可以保存返回地址。函数还可以通过参数来传递返回值,如果参数是一个指针且该指
  针指向的内存空间是可以写的,那么函数体的代码可以把需要返回的数据写入该内存空间。这样调用函数的代码在函数执行结束后,就可以通过
  该指针参数来访问这些函数返回的数据。

2.堆栈

    对于一个进程的内存空间而言,可以在逻辑上分成3个部份:代码区,静态数据区和动态数据区。动态数据区一般就是“堆栈”。“栈(stack)”和
  “堆(heap)”是两种不同的动态数据区,栈是一种线性结构,堆是一种链式结构。进程的每个线程都有私有的“栈”,所以每个线程虽然代码一样,
  但本地变量的数据都是互不干扰。一个堆栈可以通过“基地址”和“栈顶”地址来描述。全局变量和静态变量分配在静态数据区,本地变量分配在动
  态数据区,即堆栈中。程序通过堆栈的基地址和偏移量来访问本地变量。


堆栈具体的作用有:记录函数调用框架、传递函数参数、保存返回值的地址、提供函数内部局部变量的存储空间等。

3.实验mykernel实验指导(操作系统是如何工作的)

  首先搭建虚拟实验平台


运行模拟时钟中断代码

根据github上修改代码,增加mypcb.h头文件

修改myinterrupt.c和mymain.c


修改后make出现错误

将mymain.c中的movq改成movl,rsp改成esp即可。

原文地址:https://www.cnblogs.com/baoxiyuan/p/13854553.html