鏇存柊鏂囩珷

This commit is contained in:
duguosheng
2021-08-22 09:34:53 +08:00
parent 38adb18423
commit f80b226ad4
4 changed files with 33 additions and 31 deletions

3
.gitignore vendored
View File

@@ -1,2 +1,3 @@
node_modules/
_book/
_book/
update.ps1

View File

@@ -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个线程测试代码。您主要需要测试程序运行是否正确呢您是否消除了丢失的键与单线程版本相比双线程版本是否实现了并行加速即单位时间内的工作量更多

View File

@@ -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有时无法访问的问题

View File

@@ -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.2xv6系统调用除非另外声明这些系统调用返回0表示无误返回-1表示出错