• 20135320赵瀚青LINUX第五周学习笔记


    赵瀚青原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

    概述

    按照刘老师的周从三个角度讲述这个星期的学习内容。第一个角度知道自己在干什么,这周主要内容就是在menu菜单中添加两个自己的功能,也就是上周我们编辑的两个函数,如何实现就是在test.c也就是make中编译的文件中添加两个函数,然后就进行编译,实现了功能,然后进行gdb调试,可以看出这个代码的变化情况。第二个角度,为什么做这个,知道简单的原理,本周是为了让我们更加了解系统调用,就是在文件中添加两个函数,然后通过menu实现让我们知道操作系统基本工作原理。第三个角度,有什么意思,让我们更加了解操作系统,然后顺利的了解Linux内核。

    遇到的问题

    1、在实验楼中使用了copy指令但是总是显示错误,无法将配置好的menu复制到虚拟机中

    解决方式:使用git命令,然后就顺利复制了

    2、make rootfs的时候出现错误

    解决方式,代码中输入错误了几处地方

    实验内容

    1、先执行rm menu -rf,强制删除原有的menu文件夹,使用git命令更新menu代码至最新版。

    2、在test.c中增加我编写的两个函数:getpid()和getpidasm()


    3、在main函数中增加两个函数的MenuConfig命令项:

    4、编译运行,在MenuOS中输入help,可以查看当前所有的系统调用,分别执行getpid、getpidasm进行系统调用

    5、插入断点并调试


    2. 从system_call到iret过程分析

    如下图所示

    五、总结:从系统调用处理过程到一般的中断处理过程

    系统调用就是特殊的一种中断

    1. 保存现场

    在系统调用时,我们需要SAVE_ALL,用于保存系统调用时的上下文。
    同样,中断处理的第一步应该也要保存中断程序现场。
    目的:在中断处理完之后,可以返回到原来被中断的地方,在原有的运行环境下继续正确的执行下去。
    

    2. 确定中断信息

    在系统调用时,我们需要将系统调用号通过eax传入,通过sys_call_table查询到调用的系统调用,然后跳转到相应的程序进行处理。
    同样,中断处理时系统也需要有一个中断号,通过检索中断向量表,了解中断的类型和设备。
    

    3. 处理中断

    跳转到相应的中断处理程序后,对中断进行处理。
    

    4. 返回

    系统调用时最后要restore_all恢复系统调用时的现场,并用iret返回用户态。
    同样,执行完中断处理程序,内核也要执行特定指令序列,恢复中断时现场,并使得进程回到用户态
    
  • 相关阅读:
    vue form dynamic validator All In one
    TypeScript api response interface All In One
    closable VS closeable All In One
    macOS 如何开启 WiFi 热点 All In One
    vue css inline style All In One
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (下)
    牛腩新闻 59 整合添加新闻页 FreeTextBox 富文本编辑器,检测到有潜在危险的 Request.Form 值,DropDownList 的使用
    牛腩新闻 61尾声: error.aspx的使用 防止报错
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (上)
    牛腩新闻 62:尾声续2 asp.net的编译和发布
  • 原文地址:https://www.cnblogs.com/5320zhq/p/5317422.html
Copyright © 2020-2023  润新知