OSTEP

OSTEP jyy

0x 01 reference

官网

教学视频


1.why learn OS

1.解决一个问题的步骤:why-what-how
为什么要学习操作系统
什么是操作系统
怎样学习操作系统

2.三个根本问题
(1)操作系统服务谁
程序=状态机
课程涉及:多线程Linux应用程序
(2)(乘机/应用视角)操作系统为程序提供什么服务
操作系统=对象+API(用来操纵对象)
课程涉及:POSIX+部分Linux特性
(3)(实现/硬件角度)如何实现操作系统提供的服务
操作系统=C程序
课程涉及:xv6,自制迷你操作系统

2.code

说明 操作
查看用户名 uname -a
传送ACWing配置 scp .bashrc .vimrc .tmux.conf:...
下载tldr(too long dont read) sudo apt-get install tldr

3. wrong when install tldr

报错,出现用户名 is not in the sudoers file.
是因为当前的用户没有加入到sudo的配置文件里
解决方案:

步骤 方法
切换到root用户 su - root
修改配置文件 vim /etc/sudoers
修改 增加配置, 在打开的配置文件中,找到ununtu/root ALL=(ALL) ALL, 在下面添加一行:your_user_name ALL=(ALL) ALL,wq!退出,这个文件是只读的,所以需要加!在ubuntu下是最后一行

4. some jyy wonderful operating

功能 命令
在vim里面编译C/C++ :!gcc/g++ % -o main (% 获取当前文件名)
在vim里面编译并运行C++ :!g++ % -o main && ./main
wget用于从网络上下载资源,没有指定目录,下载资源回默认为当前目录。wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理 wget url

0x 02 what is Programs and Compilers

1. notes

程序就是状态机

数字系统是状态机,程序运行在数字系统上,因而程序也应该是状态机。

在 C 语言中,程序中所有的东西(堆,栈)就是程序的状态,每执行一条一句,程序的状态就会变一下。

include的形式语义就是复制粘贴,它是在预编译阶段处理的,例如我们 #include <tets.c> , 在预处理阶段,会从一个目录找到 include 的 test.c 文件,然后将它的内容复制粘贴到源代码中。

2. more instruction

gdb layout src
asm volatile(“rdrand %rax”);
info proc mappings :查看进程信息
unist: unix standard library

3. bug

#define FOE_EACH(_) _(X) _(Y);
#define DEFINE(X) int X, X1;

FOE_EACH(DEFINE)
/*
    我们的本意是执行:
    int X, X1; int Y, Y1;
    但是我们执行是:
    int X, X1; int Y, X1;
  	这里的X1重复定义了
  	这是因为X1的X并不能被识别,它会被认为是一个字符串
	正确的写法是:
	#define DEFINE(X) int X, X##1
	这样X##1的X就可以被识别
*/

4. Unix’s philosophy

  • Make each program do one thing well
  • Expect the output of every program to become the input to anothe
posted @ 2024-07-31 21:21  光風霽月  阅读(3)  评论(0编辑  收藏  举报