当前位置: 首页 > news >正文

国外门户网站设计网站APP推广

国外门户网站设计,网站APP推广,网络营销策划书300字,无限流量网站建设系列文章目录 MIT 6.s081 实验解析——labs1 MIT 6.s081 实验解析——labs2 文章目录 系列文章目录测试判断流程System call tracingsysinfo![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ab9ca34f1fc64b6aa1df74613dc1a397.png) 测试判断流程 完成代码后将.c文…系列文章目录 MIT 6.s081 实验解析——labs1 MIT 6.s081 实验解析——labs2 文章目录 系列文章目录测试判断流程System call tracingsysinfo![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ab9ca34f1fc64b6aa1df74613dc1a397.png) 测试判断流程 完成代码后将.c文件放入user文件夹中在makefile文件的UPROGS处添加要测试的文件如要添加的是sleep.c则写为_sleep。 重新编译xv6 make qemu退出qemu在文件夹下输入 ./grade-lab-util 文件名//以sleep为例 ./grade-lab-util sleepSystem call tracing trace 32 grep hello README以上述指令来说这个实验想要实现的效果是跟踪grep hello README过程中所有的系统调用其中32为掩码是要跟踪的系统调用种类将32变为2进制根据下图在要跟踪的系统调用位置置1。 所以先更改kernel/proc.h的进程结构体新增掩码 struct proc {...int mask;};为了实现进程间传递参数需添加对mask的拷贝在kernel/proc.c的fork定义中 intfork(void){...// Cause fork to return 0 in the child.np-trapframe-a0 0;np-mask p-mask;...}接下来就是要去完成系统调用 trace 的函数定义在该系统调用会接收用户态传递的参数并将其赋值给mask我们将定义写在kernel/sysproc.c中: uint64sys_trace(void){int n;argint(0,n);//接收参数myproc()-mask n;//赋给maskreturn 0;}为了在syscall中能调用sys_trace我们需要将其函数入口地址存入数组static uint64 (*syscalls[])(void)中在其末尾加入[SYS_trace] sys_trace,即可。 最后我们要在syscall调用完系统调用后通过本进程的mask来确认这个系统调用是不是被追踪的若是则输出相关信息为了方便信息输出我们为其定义一个字符串数组修改的文件为kernel/syscall.c: char *str[]{[SYS_fork] syscall fork,[SYS_exit] syscall exit,[SYS_wait] syscall wait,[SYS_pipe] syscall pipe,[SYS_read] syscall read,[SYS_kill] syscall kill,[SYS_exec] syscall exec,[SYS_fstat] syscall fstat,[SYS_chdir] syscall chdir,[SYS_dup] syscall dup,[SYS_getpid] syscall getpid,[SYS_sbrk] syscall sbrk,[SYS_sleep] syscall sleep,[SYS_uptime] syscall uptime,[SYS_open] syscall open,[SYS_write] syscall write,[SYS_mknod] syscall mknod,[SYS_unlink] syscall unlink,[SYS_link] syscall link,[SYS_mkdir] syscall mkdir,[SYS_close] syscall close,[SYS_trace] syscall trace,};voidsyscall(void){int num;struct proc *p myproc();num p-trapframe-a7; //系统调用号if(num 0 num NELEM(syscalls) syscalls[num]) {// Use num to lookup the system call function for num, call it,// and store its return value in p-trapframe-a0p-trapframe-a0 syscalls[num](); //系统调用的返回值if((p-mask num) 1) //若该系统调用被跟踪printf(%d: %s - %d\n,p-pid,str[num],p-trapframe-a0);//输出信息} else {printf(%d %s: unknown sys call %d\n,p-pid, p-name, num);p-trapframe-a0 -1;}}描述一下整个系统调用的流程核心点就在于可以通过usys.pl文件里对系统调用的定义使得可以在用户空间调用系统调用。 在用户空间的trace.c定义了trace调用然后通过ECALL指令触发向内核态的切换将对应的系统调用号和参数存入寄存器切换至内核态之后由syscall函数对调用进行响应然后调用对应的系统调用。处理完成之后将结果返还给用户空间再切换回用户态完成一次系统调用。 sysinfo 整体流程和trace差不多获取非unused的进程数核心就是遍历进程结构体数组proc并判断其元素的state。 uint64 get_used_proc(){struct proc *p;uint64 n 0;for(p proc; p proc[NPROC]; p) {if(p-state ! UNUSED) n;}return n;}获取空闲内存通过查看文件kernel/kalloc.c可知每个物理内存页的单位是PGSIZE4096字节, 以一个单链表的形式管理空闲内存页我们只需遍历该单链表获取空闲页数每页计一个PGSIZE即可。 uint64 get_free_memory(){uint64 n0;struct run* r kmem.freelist;while(r){rr-next;n PGSIZE;}return n;}将这些信息填入sysinfo结构体然后返还给用户空间。 uint64 sys_sysinfo(){uint64 st;argaddr(0, st);//获取从用户空间传入的指针。struct sysinfo p;//将信息存在结构体中p.nproc get_used_proc();p.freemem get_free_memory();if(copyout(myproc()-pagetable, st, (char *)p, sizeof(p)) 0)//拷贝回用户空间return -1;return 0;}
http://www.pierceye.com/news/191216/

相关文章:

  • 制作网站模板的发展空间wordpress 阿里云 cdn
  • 交互式网站备案万网域名网站建设
  • 备案 个人网站名称月坛网站建设公司
  • 网站建设要解决哪些方面的事项临海外发加工网
  • 甜品店网站开发背景江宁区住房建设局网站
  • asp.net网站开发视频教程找能做网站的
  • 租房合同范本下载word东莞网络优化
  • 做网站需要会写代码6net快速建站
  • 克拉玛依 网站建设红圈工程项目管理软件
  • 北京网站ui设计公司共青城网站建设公司
  • 电子商务网站设计说明书开发一个网站
  • 网站制作长沙怎么做淘客手机网站
  • 五路居网站建设wordpress php允许上传文件大小
  • 旅游网站的设计代码下列哪些不属于企业网站建设基本原则
  • 房屋租赁网站开发意义做男鞋的网站
  • 网站负责人可以备案北京建设部网站 信息中心
  • 网站建设分录怎么开四川省城乡住房建设部网站首页
  • 刘家窑网站建设公司如何在网络上推广产品
  • 全球建站东莞市的网站公司哪家好
  • 地方网站发展怎么做链接推广产品
  • 上海制造网站公司网站优化做网站优化
  • vs2012做网站wordpress 页眉
  • 北网站建设重庆建设工程查询网站
  • 给我做网站的人老是给我留点尾巴太原本地网站搭建公司
  • 静态页面网站站标代码写进到静态页面了 怎么不显示呢?自助建站网
  • 免费在线代理网站微信会员卡管理系统
  • 和动物做的网站吗做网站销售怎么样
  • 宝塔面板做织梦网站深圳龙华大浪做网站公司
  • 阿里云建网站费用上海网站建设觉策动力
  • 电子商务网站的建设与维护方法h5第三方收款平台