操作系统 2-6 课后作业2.3:系统调用

第1关版本1内核执行的完整系统调用序列

任务描述

分析版本1内核,回答下列问题: 从系统开机直到输出第 4 个字符‘1’,系统依次执行了哪些系统调用?分别是在几号进程中执行的?(对于一组连续出现的 0 号进程 pause 系统调用,每组只保留 1 个)

相关知识

为了完成本关任务,你需要掌握: 1.跟踪系统调用的发生; 2.查看当前进程的进程号; 3.跳过 0 号进程发出的连续多个 pause 系统调用; 4.捕获到系统调用时自动显示系统调用号和实现函数名。

实验过程及答案

如果题目要求在版本0

cd 0/linux
make
ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.tgz ~/os

cd os/linux-0.11-lab
tar -zxvf ../1.tgz 1

rm -rf cur
ln -s 1 cur
ls

cd 1/linux
make

cd ../..
./rungdb

另开一个终端

cd os/linux-0.11-lab
./mygdb

此时继续输入c会发现全是pause

第2关在版本1中输出系统调用信息

任务描述

本关任务:修改版本 1 内核,使得每次产生系统调用时,都在屏幕上输出系统调用号和当前进程号。(形式如29(0),表示0 号进程执行了系统调用 pause) (对于一组连续出现的 0 号进程 pause 系统调用,每组只保留 1 个)。

相关知识

为了完成本关任务,你需要掌握: 1.内核态下的字符输出; 2.如何在汇编程序中调用一个 C 函数并传递参数; 3.如何只输出 1 次信息; 4.系统调用的编号与名字之间的对应关系。

环境准备

本关卡使用版本 1 内核进行修改,文件存放在/data/workspace/myshixun/exp1中。

实验过程及答案

ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.tgz ~/os

cd os/linux-0.11-lab
tar -zxvf ../1.tgz 1

rm -rf cur
ln -s 1 cur
ls

在main.c最后补上以下这段 插入这个

第3关在版本0中输出系统调用信息

任务描述

本关任务:修改版本 0 内核,使得每次产生系统调用时(忽略 0~3 号进程产生的系统调用),都在屏幕上输出系统调用号和当前进程号。(形式如11(6),表示 6 号进程执行了系统调用 execve )

相关知识

为了完成本关任务,你需要掌握: 1.内核态下的字符输出; 2.如何在汇编程序中调用一个 C 函数并传递参数; 3.系统调用的编号与名字之间的对应关系。

环境准备

本关卡使用版本 0 内核进行修改,请确认cur指向是否正确。

实验过程及答案

rm -rf cur
ln -s 1 cur
ls

在最后加

加入这个

cd 0/linux
make

第4关为版本0内核增加一个系统调用getjiffies

任务描述

为版本 0 内核增加一个系统调用 getjiffies,其功能是获得全局变量 jiffies 的值;同时,在系统启动时自动调用该系统调用并输出结果,画面类似如下:

,

要求:该系统调用的接口函数取名为 getjiffies(),没有参数。

相关知识

为了完成本关任务,你需要掌握: 1.系统调用的执行过程是怎样的; 2.如何在内核中增加一个函数; 3.如何跟踪系统调用的发生?

编程要求

为版本 0 内核增加一个系统调用 getjiffies,其功能是获得全局变量 jiffies 的值;同时,在系统启动时自动调用该系统调用并输出结果,画面类似如下:

,

实验过程及答案

还是0内核所以不做修改

sys.c

sys.h

unistd.h

system_call.s

main.c

cd 0/linux
make

第5关在用户程序中使用新增的系统调用 

任务描述

本关任务: 1.编写一个这样的用户程序 mytest:调用上一关新增的系统调用 getjiffies,并将结果输出,系统运行画面类似如下(使用上一关开发的内核):

2.修改文件 /etc/rc ,使系统启动时自动运行该用户程序,修改内容如下图所示:

相关知识

为了完成本关任务,你需要掌握: 1.如何在用户程序中定义一个系统调用接口函数? 2.如何将文件放入 bochs 虚拟机? 3.在 bochs 虚拟机中如何编辑文件? 4.在 bochs 虚拟机中如何编译文件? 5.系统调用的执行过程是怎样的? 6.如何跟踪系统调用的发生?

编程要求

1.编写一个这样的用户程序 mytest:调用上一关新增的系统调用 getjiffies,并将结果输出,系统运行画面类似如下(使用上一关开发的内核):

2.修改文件 /etc/rc ,使系统启动时自动运行该用户程序,修改内容如下图所示:

实验过程及答案

用vscode编写如下程序

注释掉之前写的print_nr

运行虚拟机即可

以下为虚拟机内操作

注意mcopy b:test .  后面不要落下 .

uemacs /etc/rc

  1. 保存文件,可以使用命令:Ctrl-X Ctrl-S。
  2. 退出 uemacs,可以使用命令:Ctrl-X Ctrl-C。

重启虚拟机即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/230536.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

进程控制与原语

一、 进程的五种状态 在操作系统中,一个进程可以经历五种基本状态,这被称为进程的五种基本状态模型。这包括: 创建状态(Create/New): 进程刚刚被创建,但还未被执行。在这个状态下,操…

JAVA 锁

乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出…

CGAL的多边形曲面重建

1、介绍 该软件包实现了一种基于假设和选择的方法,用于从点云重建分段平面对象。该方法将从分段平面对象采样的无序点集作为输入。输出是对输入点集进行插值的紧凑且不透水的曲面网格。该方法假设提供了所有必要的主平面(或者可以使用在形状检测中描述的…

如何使用玻璃材质制作3D钻石模型

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时,有几种不同的风格&#xf…

MySQL 8 update语句更新数据表里边的数据

数据重新补充 这里使用alter table Bookbought.bookuser add userage INT after userphone;为用户表bookuser在userphone列后边添加一个类型为INT的新列userage。 使用alter table Bookbought.bookuser add sex varchar(6) after userage ;为用户表bookuser在userage 列后边添…

Hibernate 框架 (2023年架构师下半年案例分析题)

Hibernate 是一种对象和关系之间映射的框架,是 Java 应用和关系数据库之间的桥梁。它可以将数据库资源映射为一个或者多个 POJO。将面向数据库资源的各种业务操作以 POLO 的属性和方法的形式实现,使人们摆脱烦琐的 JDBC 代码,将精力更多地集中…

C/C++,优化算法——双离子推销员问题(Bitonic Travelling Salesman Problem)的计算方法与源代码

1 文本格式 // C program for the above approach #include <bits/stdc.h> using namespace std; // Size of the array a[] const int mxN 1005; // Structure to store the x and // y coordinates of a point struct Coordinates { double x, y; } a[mxN]; //…

【Linux下基本指令 —— 2】

Linux下基本指令 —— 2 十.more 指令语法&#xff1a;功能&#xff1a;常用选项&#xff1a;举例&#xff1a;Xshell7展示十一.less 指令语法&#xff1a;功能&#xff1a;选项&#xff1a;Xshell7展示 十二.head 指令语法&#xff1a;功能&#xff1a;选项&#xff1a;Xshell…

智能优化算法应用:基于孔雀算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于孔雀算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于孔雀算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.孔雀算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

一. 初识数据结构和算法

数据结构与算法是一个达到高级程序员的敲门砖。当你脱离了语言的应用层面&#xff0c;去思考他的设计层面时&#xff0c;你就依旧已经开始初识数据结构与算法了 数据结构 什么是数据结构 对于数据结构的定义官方并没有统一的解释&#xff0c;在各个百科以及算法的书中&#xf…

Unity 自定义窗口

放在Editor文件夹下&#xff1b; #if UNITY_EDITORusing System; using UnityEditor; using UnityEngine;namespace EditorCustumTool {/// <summary>/// 自定义窗口/// </summary>public class CustomWindow : EditorWindow{public enum FlagType{Flag1 101,Fl…

基于stm32ESP8266控制并显示速度的小车

这篇博客是为了实现stm32与ESP8266通讯控制的小车&#xff0c;同时可以实现在网络助手和OLED显示屏上显示速度的功能。 一、硬件部分 名称图片功能32单片机--小车-oled显示屏显示当当前的速度&#xff0c;有需要了解如何使用的可以看看我的文章&#xff0c;http://t.csdnimg.…

MATLAB - 凸优化(Convex Optimization)

系列文章目录 前言 凸优化&#xff08;Convex optimization&#xff09;是在凸约束&#xff08;convex constraints&#xff09;条件下使凸目标函数&#xff08;convex objective function&#xff09;最小化的过程&#xff0c;或者等同于在凸约束条件下使凹目标函数最大化的过…

mybatis和mybatisplus中对 同namespace 中id重复处理逻辑源码解析

一、背景 同事在同一个mapper.xml &#xff08;namespace相同&#xff09;&#xff0c;复制了一个sql没有修改id&#xff0c;正常启动项目。但是我以前使用mybatis的时候如果在namespace相同情况下&#xff0c;id重复&#xff0c;项目会报错无法正常启动&#xff0c;后来看代码…

算法Day26 数位统计

数位统计 Description 给你一个整数n&#xff0c;统计并返回各位数字都不同的数字x的个数&#xff0c;其中0 ≤ x < 10^n。 Input 输入整数n 0≤n≤13 Output 输出整数个数 Sample 代码 import java.util.Scanner;public class Main {public static void main(String[] ar…

初识 pytest 及断言使用

章节目录&#xff1a; 一、pytest 相关概述二、环境搭建三、使用前提四、断言4.1 常用断言4.2 异常断言4.3 断言装饰器 五、结束语 一、pytest 相关概述 pytest 是一个基于 Python 编写的测试框架&#xff0c;用于编写和运行各种类型的软件测试。它提供了丰富的功能和灵活的语法…

CleanMyMac2024一款十分高效的mac系统清理工具

当很多人还在为电脑运行缓慢、工作问题不能快速得到解决而烦恼的时候&#xff0c;我已经使用过了多款系统清理工具&#xff0c;并找到了最适合我的那一款。我的电脑是超耐用的Mac book&#xff0c;接下来给大家介绍三种在众多苹果电脑清理软件的排名较高的软件。 一、Maintena…

JUnit 之初体验

文章目录 1.定义2.引入1&#xff09;使用 Maven 工具2&#xff09;使用 Gradle 工具3&#xff09;使用 Jar 包 2.样例0&#xff09;前提1&#xff09;测试类2&#xff09;测试方法3&#xff09;测试断言4&#xff09;实施 总结 1.定义 JUnit 是一个流行的 Java 单元测试框架&a…

NLP项目实战01之电影评论分类

介绍&#xff1a; 欢迎来到本篇文章&#xff01;在这里&#xff0c;我们将探讨一个常见而重要的自然语言处理任务——文本分类。具体而言&#xff0c;我们将关注情感分析任务&#xff0c;即通过分析电影评论的情感来判断评论是正面的、负面的。 展示&#xff1a; 训练展示如下…

【深度学习】一维数组的 K-Means 聚类算法理解

刚看了这个算法&#xff0c;理解如下&#xff0c;放在这里&#xff0c;备忘&#xff0c;如有错误的地方&#xff0c;请指出&#xff0c;谢谢 需要做聚类的数组我们称之为【源数组】 需要一个分组个数K变量来标记需要分多少个组&#xff0c;这个数组我们称之为【聚类中心数组】…