好了,这里的参数传递差不多讲完了…手机截图截不全,放一个凑合着看吧。注意,这个部分的修改在userprog/process.c的setup_stack()函数中,这里我单独拎出来了一个push_stack方便大家查看… 好了就这样吧…系统调用部分明天再更新。 好啦,下一个topic是…系统调用。 这是用户程序主动切到内核态的一种方式。就是...
为了能够中断,设置栈并调用中断处理程序 .func intr_entryintr_entry:/* 保存调用者的寄存器 */pushl %dspushl %espushl %fspushl %gspushal/* 设置内核环境 */cld // 字符串指令向上走mov $SEL_KDSEG, %eax // 初始化段寄存器mov %eax, %dsmov %eax, %esleal 56(%esp), %edp // 设置框架指针/* ...
4, 现在我们需要修改同步机制的唤醒, 在文件synch.c中, 这里我选择O(1)插入信号量的等待队列, 而O(n)选择最大优先级弹出, 简单来说就是在sema_down中O(1)插入push_back, 在sema_up中调用list_max()选择优先级最大的弹出. 补充问题 为什么thread_create()可以调用try_yield() 检查thread_create()的使用...
pushl %gs pushal /* 设置内核环境 */ cld // 字符串指令向上走 mov $SEL_KDSEG, %eax // 初始化段寄存器 mov %eax, %ds mov %eax, %es leal 56(%esp), %edp // 设置框架指针 /* 调用中断处理程序 */ push %esp .glovl intr_handler call intr_handler // Call interrupt handler andl $4, ...
61、T *) (ulnt3_V * &(LIST_ELEM)nXt -offsetof (STRUCT? MEMBER.next).将三个函数的list_push_back()改为直nead unblcck国SJtlist_push_b:111 st_in3eu_or-ierea i4:eady_LLSLf st-?eitrar (Ii3t_ie3a_fuic x) injll;imt ITiredd11 anstr T_or tie red |all_llst, r-Blllnr I li...
{print $1;}')#to remove image or containerdocker rm (docker ps-a|grep pintos|awk'{print $1;}') docker rmi (docker ps-a|grep pintos|awk'{print $1;}')#if in dev change, ie. of dockerfile, to push to docker hubdocker login docker tag pintos robgrzel/pintos docker push robgr...
Pintos实验主要分成四部分,如下所⽰:实验⼀:Thread 实验⼆:User Programs 实验三:Virtual Memory 实验四:File System 实验原理:通过 bochs 加载 pintos 操作系统,该操作系统会根据 pintos 的实现打印运⾏结果,通过⽐较标准输出⽂档和实际输出,来判断 pintos 实现是否符合要求。环境配置:实验实现代码...
在process.c文件中添加push_argument()函数,用来进行压栈操作,代码如下: void push_argument(void**esp,int argc,int argv[]){*esp=(int)*esp&0xfffffffc;//内存对齐*esp-=4;*(int*)*esp=0;int i;for(i=argc-1;i>=0;i--){*esp-=4;*(int*)*esp=argv[i];}*esp-=4;*(int*)*esp=(int...
1/*Returns the current interrupt status.*/2enumintr_level3intr_get_level (void)4{5uint32_t flags;67/*Push the flags register on the processor stack, then pop the8value off the stack into `flags'. See [IA32-v2b] "PUSHF"9and "POP" and [IA32-v3a] 5.8.1 "Masking Maskable Hardware...
所以我们在主线程执行V操作时,要让主线程放弃CPU,这样才能释放子线程来运行,所以我们只需要在sema_up()函数里增加一个thread_yield(),再把sema_down()里的list_push_back换成list_insert_ordered即可。 最后还有一个priority_condvar测试点,我们看到cond_signal()里面把cond->waiters的第一个元素弹出,所以我们如果...