date: 2019-02-12
tags: OS 6.828
这里会记录阅读6.828课程lecture note的我的个人笔记。可能会中英混杂,不是很适合外人阅读,也请见谅。
操作系统的主要目的是:
设计方式是:
整体组织,层状结构:硬件 -> kernel -> 用户应用
OS提供的主要服务:
所谓抽象,即为应用只能通过system call来使用某种功能。
OS的抽象是什么样的呢?
6.828 is largely about design and implementation of system call interface.
对于ls
,我们可以使用如下命令来看它使用了哪些命令:
strace /bin/ls
会显示其一步一步都调用了哪些system call。
example copy.c
没有找到代码,所以只好自己写了一个:
#include <unistd.h>
#include <sys/types.h>
int main() {
char buf[128];
size_t len = read(0, buf, sizeof(buf));
write(1, buf, len);
}
运行的结果为:
$ strace ./copy
...
read(0, "123\n", 128) = 4
write(1, "123\n", 4) = 4
...
注意因为需要输入变量,所以这里是整理过的输出。
example: open.c
还是自己写了一个:
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd;
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
char *filename = "output.txt";
fd = creat(filename, mode); // notice, there is no 'e'
char buf[13] = "hello world\n";
write(fd, buf, sizeof(buf));
}
运行的结果为:
$ strace ./open
...
creat("output.txt", 0644) = 3
write(3, "hello world\n\0", 13) = 13
...
注意这里fd就是3
example: redirect.c
不知道要写什么样的代码。。。
Unix shell
因为sh.c
在之后的作业里要用,就不在这里细说了。
example: pipe1.c
, pipe2.c
都不知道是什么样的代码。。。