1
0
mirror of https://github.com/rcore-os/rCore.git synced 2025-01-31 10:04:04 +04:00

week13 report

This commit is contained in:
function2-llx 2020-05-16 09:14:19 +08:00
parent 5c7b637c97
commit 3d5f3555fc
4 changed files with 152 additions and 0 deletions

Binary file not shown.

View File

@ -0,0 +1,152 @@
\documentclass{beamer}
\usepackage{amsmath}
\usefonttheme{serif}
\usepackage{ctex}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{minted}
\usepackage{graphics}
\usepackage{booktabs}
\usepackage{xeCJK}
\setCJKmainfont[ItalicFont={楷体}, BoldFont={黑体}]{宋体}
\usepackage{booktabs}
\newcommand{\E}{\text{E}}
\newcommand{\var}{\text{Var}}
\newcommand{\cov}{\text{Cov}}
\renewcommand{\d}{\text{d}}
\setbeamertemplate{footline}[frame number]
\title{为 rCore 实现更多系统调用}
\author{罗崚骁 \quad 宋香君}
\begin{document}
\begin{frame}
\titlepage
\end{frame}
\begin{frame}{课程设计目标}
\begin{itemize}
\setlength{\itemsep}{10pt}
\item rCore 自编译
\begin{itemize}
\setlength{\itemsep}{10pt}
\item musl-libc 完善
\item Make, CMake
\item Rustc, Cargo
\item 文件系统支持
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}{目前进展}
{运行 shell 脚本}
\begin{itemize}
\setlength{\itemsep}{10pt}
\item ash + 脚本文件名运行脚本sys\_dupfcntl
\item 命令替换Command Substitution
\begin{itemize}
\setlength{\itemsep}{10pt}
\item 诸如 echo \$(echo 233) 这样的命令
\item 需要对管道增加阻塞
\end{itemize}
\item 可以跑通 make 的 configure 脚本和构建脚本
\end{itemize}
\end{frame}
\begin{frame}{目前进展}
{GNU Make}
\begin{itemize}
\setlength{\itemsep}{10pt}
\item 能够在 rCore 内部缺少 make 的情况下构建configure+build.sh
\item 基本功能正常运行,可以使用 3.78.1 的 make 构建出3.79 的 make
\item 支持增量构建
\begin{itemize}
\item 增加了文件系统对修改时间的记录,完善了对 stat 的实现,顺便还能支持 touch
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}{目前进展}
{libc-test}
\begin{itemize}
\setlength{\itemsep}{10pt}
\item Makefile 正常执行
\item 给出了所有测例的执行结果
\begin{itemize}
\setlength{\itemsep}{10pt}
\item 258 个测例成功
\item 215 个测例失败,其中 18 个测例无法正常结束
\item 失败的测例主要是 pthread缺少信号机制支持、math大量计算错误140 个左右) 相关
\item 修好了全部信号量相关的测例
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}{后续任务}
{Cargo}
\begin{itemize}
\setlength{\itemsep}{10pt}
\item 目前只能新建项目,还无法成功使用 Cargo 构建
\includegraphics[width=\linewidth]{assets/cargo.png}
\begin{figure}[htbp]
\centering
% \caption{}
% \label{}
\end{figure}
\end{itemize}
\end{frame}
\begin{frame}{后续任务}
{libc-test}
\begin{itemize}
\setlength{\itemsep}{10pt}
\item 主要针对 pthread 和数学的相关测例进行修复
\item 增加信号机制,实现一些和信号相关的系统调用
\item 编写文档,总结 rCore 开发微小的经验
\end{itemize}
\end{frame}
\begin{frame}{调试方法}
\begin{itemize}
\setlength{\itemsep}{10pt}
\item 除了可以开启记录模式打印每条系统调用外,还可以用 gdb 通过
相应端口连接到 qemu 进行调试
\item 使用 CLion 提供的 gdb remote debug 可以在 IDE 中更方便地定位到错误
\item 不过目前 rCore 的 Debug 版也开了 O2调试时困难变大
\end{itemize}
\end{frame}
\begin{frame}{调试方法}
\includegraphics[width=\linewidth]{assets/gdb.png}
\begin{figure}[]
\centering
% \caption{}
% \label{}
\end{figure}
\end{frame}
\begin{frame}{问题选讲}
{IO 阻塞与进程死锁}
\begin{itemize}
\setlength{\itemsep}{10pt}
\item 在有阻塞的 IO 中,目前的设计里 inode 的实现中看不见进程,
并不能释放进程锁
\item 于是,设想有如下情景:进程 2 由进程 1 fork 出来并且有连接他们的管道进程1读进程2写。
进程1先读保持着锁进入阻塞进程2在写之前需要调用 getppid 获取父进程 id便发生了死锁。
\item 解决方法:考虑到进程的 pid 其实是定值,不必要用锁保护,可以和进程并列保存。
\item 后续IO 阻塞时释放进程锁
\end{itemize}
\end{frame}
\begin{frame}{结束}
谢谢观看
\end{frame}
\end{document}

BIN
slides/assets/cargo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
slides/assets/gdb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB