操作系统接口 MIT 6.828 - 1. Lab 01: Xv6 and Unix utilities

本文会将lab1中的思路以及知识点进行分析,并作为作者学习MIT 6.828的一个学习总结,希望能够帮助到学习该lab的同学们
中文版书籍:中文版书籍
实验教案地址:教案地址

操作系统接口

在这里插入图片描述
在操作系统中,为了能够有效地与操作系统内核进行交互,所以衍生出操作系统接口,能够为用户提供服务。
常见地一些系统调用地接口如下所示:
在这里插入图片描述

进程,

XV6操作系统中进程由两个部分组成:用户的内存空间与进程状态,xv6能够分时的方法去切换进程通过对寄存器进行保存的处理
xv6 通常隐式地分配用户的内存空间。fork 在子进程需要装入父进程的内存拷贝时分配空间,exec 在需要装入可执行文件时分配空间。一个进程在需要额外内存时可以通过调用 sbrk(n) 来增加 n 字节的数据内存。 sbrk 返回新的内存的地址。

IO与文件描述符

文件描述符是一个整数,它代表了一个进程可以读写的被内核管理的对象。进程可以通过多种方式获得一个文件描述符,如打开文件、目录、设备,或者创建一个管道(pipe),或者复制已经存在的文件描述符。
每个进程都有一张表,而 xv6 内核就以文件描述符作为这张表的索引,所以每个进程都有一个从0开始的文件描述符空间。
最常见的文件描述符:0 输入流 1 输出流 2 错误流

dup pipe的使用

(209条消息) xv6中pipe&dup_xv6 dup函数的含义_G129558的博客-CSDN博客

lab1

实验目标:熟悉常见的系统调用
stat fork dup pipe read write open等

sleep

为xv6实现UNIX程序睡眠;您的睡眠应该在用户指定的时间内暂停。tick是由xv6内核定义的时间概念,即来自计时器芯片的两次中断之间的时间。

具体代码如下所示:

./grade-lab-util sleep

"include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"
int main(int argc, char *argv[]){
if(argc <= 2) sleep(atoi(argv[l]));return o;

知识点: 通过atoi 实现字符串与数字之间的转化

pingpong

通过fork与pipe实现两个进程之间的通信

#include "kernel/types.h"
#include "user/user.h"
int main(int argc, char *argv[J) {
int parent_fd[2], child_fd[2];
pipe(parent_fd);
pipe(child_fd);
char buf[64];
if (fork()){
// Parent
close(child_fd[l]);
write(parent_fd[ij,"ping", strlen("ping"));
read(child_fd[o], buf, 4);
printf("%d:received %s\n", getpid(), buf);
close(parent_fd[1]);
close(parent_fd[0]);
close(child_fd[o]);
} else {
// Child
close(parent_fd[1]);
read(parent_fd[o], buf, 4);
printf("%d:-received %s\n", getpid(), buf);
write(child_fd[i],"pong", strlen("pong"));
close(child_fd[l]);
close(child_fd[o]);
exit(0);

知识点:

  • fork() 在进行创建子进程时会将所有的数据以及file table进行复制,随后依次执行,在子进程中fork()返回0副进程中返回对应的PID
  • getpid()能够得到该进程下的PID号
  • 在进行发送时需要考虑顺序关系,也可以通过wait进行等待

primes

思路:首先将所有的数字放入pipe的输入流,随后在输出流一端就行读取,然后再通过fork()创建进程,在主进程中将处理后的数据进行发送,副进程中进行接受,依次往复
我们可以通过如下代码进行实现:
在这里插入图片描述

find

思路:在实现find中,通过学习ls.c中的如何解析文件状态,fstat结构体如下
在这里插入图片描述
通过判断文件的类型,将T_DIR文件类型的文件中,对所有的文件进行遍历,其中遍历的操作如下所示:
关键代码如下所示:
在这里插入图片描述

xargs

xargs通过等待输入流的数据到来,随后将数据作为参数添加到该命令的后边即可
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SCI征稿】计算机算法、通信、人工智能、网络、物联网、机器学习等领域,13本期刊影响因子上涨,这几本期刊录用快

2023年JCR发布后&#xff0c;计算机领域SCI期刊有13本影响因子上涨&#xff0c;审稿周期短&#xff0c;进展顺利&#xff1a; 1️⃣IF&#xff1a;6.0-7.0↑&#xff0c;JCR2区&#xff0c;中科院3区&#xff0c;SCI&EI 双检&#xff0c;CCF-C类 征稿领域&#xff1a;概率…

邮箱推荐和(警告)使用qq邮箱的坏处

qq如果发布违规消息&#xff0c;比如群聊无意发布会导致你账号封号&#xff0c;而且随着次数增多&#xff0c;会导致永久封号&#xff0c;你的qq音乐&#xff0c;qq浏览器&#xff0c;qq游戏&#xff0c;{qq邮箱}&#xff0c;全部会无法登录&#xff0c;比如需要登陆邮箱验证码…

【Java】面向对象基础 之 静态字段和静态方法

1、静态字段 在一个class中定义的字段&#xff0c;我们称之为实例字段。实例字段的特点是&#xff0c;每个实例都有独立的字段&#xff0c;各个实例的同名字段互不影响。 还有一种字段&#xff0c;是用static修饰的字段&#xff0c;称为静态字段&#xff1a;static field。 …

网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)

目录 Java网络编程中的常用类 TCP通信的实现和项目案例 TCP通信入门案例 TCP单向通信 TCP双向通信 创建点对点的聊天应用 一对多应用 一对多聊天服务器 Java网络编程中的常用类 Java为了跨平台&#xff0c;在网络应用通信时是不允许直接调用操作系统接 口的&#xff0…

【ARIMA-SSA-LSTM】合差分自回归移动平均方法-麻雀优化-长短期记忆神经网络研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

允许Traceroute探测漏洞和ICMP timestamp请求响应漏洞解决方法(三)

目录 服务器检测出了漏洞需要修改 1.允许Traceroute探测漏洞解决方法 2、ICMP timestamp请求响应漏洞 服务器检测出了漏洞需要修改 1.允许Traceroute探测漏洞解决方法 详细描述 本插件使用Traceroute探测来获取扫描器与远程主机之间的路由信息。攻击者也可以利用这些信息来…

word自动编号变黑块的亲测解决方案

具体问题如下&#xff1a; 出现这种情况就是word的自动编号字体出错&#xff0c;可以在word中运行脚本来解决&#xff1a; Sub repair()For Each templ In ActiveDocument.ListTemplates For Each lev In templ.ListLevels lev.Font.Reset Next lev Next templEnd Sub代码如上…

信息安全-应用安全-软件成分安全分析(SCA)能力的建设与演进

1. 前言 SCA 概念出现其实很久了。简单来说&#xff0c;就是针对现有的软件系统生成粒度非常细的 SBOM&#xff08;Software Bill of Materials 软件物料单&#xff09;清单&#xff0c;然后通过⻛险数据去匹配有没有存在⻛险组件被引用。目前&#xff0c;市面上比较出色的商业…

Spring Cloud的基本应用

上篇文章我们的eureka的集群已经搭建完毕,但是我们还没有开始使用,之前我们的page访问的方法是直接写死的,现在我们就可以改为集群的方式来写 Autowired//注册中心对应的客户端对象private DiscoveryClient discoveryClient;RequestMapping("query/{id}")public Prod…

[MMDetection]测试模型

以下是基于MMdetection3.10版本 1、简单测试模型 测试模型一般使用tools中的test.py&#xff0c;一般使用方式 python tools/test.py config文件路径 权重文件路径 可以通过--show 来以gui展示检测结果 python tools/test.py config文件路径 权重文件路径 --show 可以通过--s…

Jstat命令解析

Jstat命令解析 Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”&#xff0c;它位于java的bin目录下&#xff0c;主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控&#xff0c;包括了对Heap size和垃圾回收…

数据库之MySQL字符集与数据库操作

目录 字符集 CHRARCTER SET 与COLLATION的关联 CHRARCTER SET 定义 基础操作 查看当前MySQL Server支持的 CHARACTER SET 查看特定字符集信息&#xff08;主要包含默认的COLLATION 与 MAXLEN&#xff09; COLLATION 定义 COLLATION后缀 基础操作 查看MySQL Server支持的…