mirror of
https://github.com/duguosheng/6.S081-All-in-one.git
synced 2026-05-05 03:30:47 +08:00
鏇存柊鏂囩珷
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
node_modules/
|
||||
_book/
|
||||
_book/
|
||||
update.ps1
|
||||
@@ -136,6 +136,7 @@ $ ./ph 2
|
||||
> * `pthread_mutex_init(&lock, NULL); // initialize the lock`
|
||||
> * `pthread_mutex_lock(&lock); // acquire lock`
|
||||
> * `pthread_mutex_unlock(&lock); // release lock`
|
||||
>
|
||||
> 当`make grade`说您的代码通过`ph_safe`测试时,您就完成了,该测试需要两个线程的键缺失数为0。在此时,`ph_fast`测试失败是正常的。
|
||||
|
||||
不要忘记调用`pthread_mutex_init()`。首先用1个线程测试代码,然后用2个线程测试代码。您主要需要测试:程序运行是否正确呢(即,您是否消除了丢失的键?)?与单线程版本相比,双线程版本是否实现了并行加速(即单位时间内的工作量更多)?
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
> [!DANGER]
|
||||
> MIT 6.S081 这门课程每个lab对应一个git分支,所以请不要擅自将***.git***目录删除或更改origin指向的仓库地址
|
||||
|
||||
1. **首先将mit的实验代码克隆到本地**
|
||||
(1). **首先将mit的实验代码克隆到本地**
|
||||
|
||||
```bash
|
||||
git clone git://g.csail.mit.edu/xv6-labs-2020
|
||||
@@ -11,7 +11,7 @@ git clone git://g.csail.mit.edu/xv6-labs-2020
|
||||
|
||||
|
||||
|
||||
2. **在github创建一个新的空仓库**
|
||||
(2). **在github创建一个新的空仓库**
|
||||
|
||||
创建完成后会有提示代码,请**不要**根据提示代码操作,并且记下右图中红色标注的仓库地址
|
||||
|
||||
@@ -19,7 +19,7 @@ git clone git://g.csail.mit.edu/xv6-labs-2020
|
||||
|
||||
|
||||
|
||||
3. **添加git仓库地址**
|
||||
(3). **添加git仓库地址**
|
||||
|
||||
查看本地仓库的git配置文件,可以看到***origin***主机名下已经有了对应的上游仓库地址
|
||||
|
||||
@@ -41,7 +41,7 @@ cat .git/config
|
||||
|
||||
|
||||
|
||||
4. **`git push`命令**
|
||||
(4). **`git push`命令**
|
||||
|
||||
- **功能**:`git push`命令用于从将本地的分支版本上传到远程并合并。
|
||||
- **命令格式**:
|
||||
@@ -60,7 +60,7 @@ git push <远程主机名> <本地分支名>
|
||||
|
||||
|
||||
|
||||
5. **将实验代码推送github仓库**
|
||||
(5). **将实验代码推送github仓库**
|
||||
|
||||
例如:将实验1用到的***util***分支推送到github
|
||||
|
||||
@@ -75,7 +75,7 @@ git push github util:util
|
||||
|
||||
|
||||
|
||||
6. **xv6实验git分支建议**
|
||||
(6). **xv6实验git分支建议**
|
||||
|
||||
建议是每个实验创建一个测试分支,例如对于***util***来说
|
||||
|
||||
@@ -96,6 +96,6 @@ git push github util:util
|
||||
|
||||
|
||||
|
||||
7. **其他**
|
||||
(7). **其他**
|
||||
|
||||
你还可以添加gitee,防止github有时无法访问的问题
|
||||
@@ -16,29 +16,29 @@
|
||||
|
||||
内核提供的系统调用集合是用户程序看到的接口。Xv6内核提供了Unix内核传统上提供的服务和系统调用的子集。表1.2列出了xv6的所有系统调用。
|
||||
|
||||
| **系统调用** | **描述** |
|
||||
| ------------------------------------- | ------------------------------------------------------------ |
|
||||
| int fork() | 创建一个进程,返回子进程的PID |
|
||||
| int exit(int status) | 终止当前进程,并将状态报告给wait()函数。无返回 |
|
||||
| int wait(int *status) | 等待一个子进程退出; 将退出状态存入`*status`; 返回子进程PID。 |
|
||||
| int kill(int pid) | 终止对应PID的进程,返回0,或返回-1表示错误 |
|
||||
| int getpid() | 返回当前进程的PID |
|
||||
| int sleep(int n) | 暂停n个时钟节拍 |
|
||||
| int exec(char *file, char *argv[]) | 加载一个文件并使用参数执行它; 只有在出错时才返回 |
|
||||
| char *sbrk(int n) | 按n 字节增长进程的内存。返回新内存的开始 |
|
||||
| int open(char *file, int flags) | 打开一个文件;flags表示read/write;返回一个fd(文件描述符) |
|
||||
| int write(int fd, char *buf, int n) | 从buf 写n 个字节到文件描述符fd; 返回n |
|
||||
| int read(int fd, char *buf, int n) | 将n 个字节读入buf;返回读取的字节数;如果文件结束,返回0 |
|
||||
| int close(int fd) | 释放打开的文件fd |
|
||||
| int dup(int fd) | 返回一个新的文件描述符,指向与fd 相同的文件 |
|
||||
| int pipe(int p[]) | 创建一个管道,把write/read文件描述符放在p[0]和p[1]中 |
|
||||
| int chdir(char *dir) | 改变当前的工作目录 |
|
||||
| int mkdir(char *dir) | 创建一个新目录 |
|
||||
| int mknod(char *file, int, int) | 创建一个设备文件 |
|
||||
| int fstat(int fd, struct stat *st) | 将打开文件fd的信息放入*st |
|
||||
| int stat(char *file, struct stat *st) | 将指定名称的文件信息放入*st |
|
||||
| int link(char *file1, char *file2) | 为文件file1创建另一个名称(file2) |
|
||||
| int unlink(char *file) | 删除一个文件 |
|
||||
| **系统调用** | **描述** |
|
||||
| --------------------------------------- | ----------------------------------------------------------- |
|
||||
| `int fork()` | 创建一个进程,返回子进程的PID |
|
||||
| `int exit(int status)` | 终止当前进程,并将状态报告给wait()函数。无返回 |
|
||||
| `int wait(int *status)` | 等待一个子进程退出; 将退出状态存入*status; 返回子进程PID。 |
|
||||
| `int kill(int pid)` | 终止对应PID的进程,返回0,或返回-1表示错误 |
|
||||
| `int getpid()` | 返回当前进程的PID |
|
||||
| `int sleep(int n)` | 暂停n个时钟节拍 |
|
||||
| `int exec(char *file, char *argv[])` | 加载一个文件并使用参数执行它; 只有在出错时才返回 |
|
||||
| `char *sbrk(int n)` | 按n 字节增长进程的内存。返回新内存的开始 |
|
||||
| `int open(char *file, int flags)` | 打开一个文件;flags表示read/write;返回一个fd(文件描述符) |
|
||||
| `int write(int fd, char *buf, int n)` | 从buf 写n 个字节到文件描述符fd; 返回n |
|
||||
| `int read(int fd, char *buf, int n)` | 将n 个字节读入buf;返回读取的字节数;如果文件结束,返回0 |
|
||||
| `int close(int fd)` | 释放打开的文件fd |
|
||||
| `int dup(int fd)` | 返回一个新的文件描述符,指向与fd 相同的文件 |
|
||||
| `int pipe(int p[])` | 创建一个管道,把write/read文件描述符放在p[0]和p[1]中 |
|
||||
| `int chdir(char *dir)` | 改变当前的工作目录 |
|
||||
| `int mkdir(char *dir)` | 创建一个新目录 |
|
||||
| `int mknod(char *file, int, int)` | 创建一个设备文件 |
|
||||
| `int fstat(int fd, struct stat *st)` | 将打开文件fd的信息放入*st |
|
||||
| `int stat(char *file, struct stat *st)` | 将指定名称的文件信息放入*st |
|
||||
| `int link(char *file1, char *file2)` | 为文件file1创建另一个名称(file2) |
|
||||
| `int unlink(char *file)` | 删除一个文件 |
|
||||
|
||||
表1.2:xv6系统调用(除非另外声明,这些系统调用返回0表示无误,返回-1表示出错)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user