zhuzilin's Blog

about

6.828 笔记1

date: 2019-02-12
tags: OS  6.828  

这里会记录阅读6.828课程lecture note的我的个人笔记。可能会中英混杂,不是很适合外人阅读,也请见谅。

Lecture 1: O/S overview

操作系统的主要目的是:

  • 支持应用
  • 为了便捷对硬件进行抽象
  • 为多种应用multiplexing the hardware
  • 为避免bug对各个应用进行隔离
  • 提供高性能

设计方式是:

  • 微观看,一个管理硬件的library
  • 宏观看,将物理机虚拟为一个有着更好性质的虚拟机

整体组织,层状结构:硬件 -> kernel -> 用户应用

OS提供的主要服务:

  • process
  • memory allocation
  • file contents
  • directories and file names
  • security
  • many others: users, IPC, network, time, terminal...

所谓抽象,即为应用只能通过system call来使用某种功能。

OS的抽象是什么样的呢?

  • 应用只通过system call来和OS进行交互

Introduction to system calls

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 都不知道是什么样的代码。。。