zoukankan      html  css  js  c++  java
  • 2019-2020-1 20199321《Linux内核原理与分析》第六周作业

    给MenuOS增加命令

    • 首先要强制删除当前的menu目录,然后重新克隆一个新版本的menu。
    • 进入menu,运行rootf方式脚本,自动编译生成根文件系统,运行MenuOs系统。
    cd LinuxKernel
    rm -rf menu
    git clone https://github.com/mengning/menu.git
    cd menu
    make rootfs
    

    • 打开test.c,main函数中的MenuConfig就是对应的系统调用的功能增加,在上面给出具体实现。

    使用gdb跟踪内核函数sys_time

    • 调试内核,并启动gdb,加载3.18.6的内核,连接到target remote:1234
    cd..
    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
    file linux-3.18.6/vmlinux
    target remote:1234
    

    • 在start_kernelF和sys_time处设置断点
    b start_kernel
    b sys_time
    


    系统调用在内核代码中的处理过程

    中断向量0x80和system_call中断服务程序入口的关系

    - 在用户态中有一个系统调用xyz(),xyz()调用了SYSCALL来触发系统调用。
    - 中断向量0x80对应system_call中断服务程序入口
    


    tart_kernel函数执行内核启动的初始化工作,其中会调用trap_init函数。通过set_sysytem_trap_gate函数将中断向量0x80和入口函数system_call绑定.执行0x80直接跳转到system_call。

    在system_call汇编代码中的系统调用内核处理函数

    1.系统调用户态接口和系统调用的内核处理函数是通过系统调用号匹配起来的。
    2.使用EAX寄存器传递系统调用号。
    3.现场保护SAVE_ALL和和恢复现场restore_all。
    4.syscall_exit中判断当前的任务是否需要进程调度,如果需要进程调度进入syscall_exit_work,执行进程调度,结束后恢复现场返回用户态。syscall_exit_work里有一个进程调度时机。
    



    总结:

  • 相关阅读:
    HTML
    PHP正则表达式实例汇总
    PHP环境配置解释
    8.25study
    vue 封装手机验证登录组件
    vue 项目 vuetify 中 table item 按钮展示
    vue项目局部引入ant-design-vue库
    vue 组件Table组件鼠标显示效果
    vue 封装登录组件
    vue项目---编辑与新增页
  • 原文地址:https://www.cnblogs.com/20199321zjy/p/11727046.html
Copyright © 2011-2022 走看看