我正在考虑修改玩具操作系统,我只是想学习一些代码及其功能。我得到了一个“线程”结构,它具有一个“pcb”结构的成员,这是一个过程控制块,它将线程连接到我认为的底层物理硬件。
无论如何,在这个“pcb”结构中有初始化函数,它初始化新创建的线程的pcb。这是函数定义:
void md_initpcb(struct pcb *, char *stack, void *data1, unsigned long data2,
void (*func)(void *, unsigned long));
关于代码,最后一个参数的含义是什么?它与代码或指令有关吗
从概念上讲,我对这些东西如何适应大局感到困惑。据我所知,Thread是代码执行的单位;例如,它可以与用户程序相关,因此线程之间的切换可以快速地提供并行运行进程的错觉。好吧所以这个Thread然后需要它自己的堆栈,寄存器(不明白)和一些控制(pcb)。
很抱歉,如果这种情况到处都是。作为参考,我开始OS161 project。
感谢。
答案 0 :(得分:7)
这是一个函数指针。您传递一个返回void的函数的地址,并获取一个void指针和一个unsigned long。
所以,例如,如果你有一个函数:
void myfunc(void *data, unsigned long number);
然后你可以将它作为第四个参数传递给md_initpcb
。
此函数是您要创建的线程将要执行的代码。完成后,线程也会完成。
答案 1 :(得分:2)
void (*func)(void *, unsigned long)
表示func
是指向void*
和unsigned long
并返回void
的函数的指针。
我猜这个参数是新线程运行的函数,data1和data2是新线程传递给该函数的参数。