参考pdf 《computer basic》
操作系统环境
运行环境 = 操作系统 + 硬件
硬件:处理器(CPU)、显卡(图形处理器GPU)API(application programming interface)
应用程序向系统传递指令的途径称为APIFreeBSD
(将源代码直接发送给应用程序,而不是发送机器代码)
存在Ports机制,能够结合当前运行环境的硬件环境来编译应用的源代码。如果目标应用的源代码找不到,自动使用FTP连接到相应站点下载代码。提供相同运行环境的Java虚拟机
Java语言编译后生成的不是特定CPU使用的本地机器代码,而是名为字节代码
的程序。它的运行环境就叫做java虚拟机。BIOS
Basic Input/Output System
BIOS存储在ROM中
参考《cxuan-os》
参考 Operating System Engineering - MIT
LE1
- fk: operating system
需要自己设计一个小型的OS
对于系统调用,如ls, 在位置/bin/ls
strace命令可以用来监控用户空间进程和内核的交互,如系统调用。
strace /bin/ls
fd文件描述符,0是标准输入,1是标准输出
命令dup
,复制文件描述符
wc -l
统计行数
fork会把子进程的pid
给父进程
,在把0给子进程
execvp The exec() family of functions replaces the current process image with a new process image.
相当于用新的程序覆盖了原来的程序
pipe fd在fork之中是可以继承的,所以可以在程序之间通信。
对于 ls | wc -l
, shell需要做的工作:
创建一个pipe
fork
pipe 的 write fd设为1(ls)
exec ls
pipe 的 read fd设为0(wc)
exec wc
wait for wc
& |
&任务在后台执行
&& 上一条执行完,才执行下一条
| 管道,上一条的结果作为下一条的输入
|| 表示上一条命令执行失败后,才执行下一条命令
Unix介绍
参考视频 https://www.youtube.com/watch?v=tc4ROCJYbm0
kernel/shell/programAssignment:Booting a PC
实验环境配置:
首先安装qemu模拟器
brew install qemu
(自动给我安装了opencv和其他很多东西,总之很慢)
brew tap liudangyi/i386-jos-elf-gcc
brew install i386-jos-elf-gcc i386-jos-elf-gdb
brew info qemu
可以查看已经安装的qemu信息
在本机上搭建环境,参考 https://pdos.csail.mit.edu/6.828/2018/tools.html
推荐在虚拟机搭建
Compiler Toolchain
如果这两步成功了,就不需要再compile toolchain了
QEMU
git clone https://github.com/mit-pdos/6.828-qemu.git qemu
./configure --disable-kvm --disable-werror [--prefix=/root/os] [--target-list="i386-softmmu x86_64-softmmu"]
出现错误
解决:
安装依赖包:apt-get install libpixman-1-dev
还是不行,参考
-
[libsdl1.2-dev] https://blog.csdn.net/WUDIxi/article/details/100170859
-
libtool-bin
apt-get install libtool-bin
-
libglib2.0-dev
-
libz-dev
-
libpixman-1-dev
apt-get install libpixman-1-dev
./configure --disable-kvm --disable-werror [--prefix=/root/os/qemuinstall] [--target-list="i386-softmmu x86_64-softmmu"]
错误更新为如下:
make && make install
错误:
参考 https://blog.csdn.net/Wu1069444514/article/details/89266183
https://www.jianshu.com/p/ec675f0e1482 (为什么没有早点看到这篇 )
qga/commands-posix.c
Werror是把警告都当作错误来看待,把它删掉,再make
其他文件
-
需要x86的机器
-
git资源下载
git clone https://pdos.csail.mit.edu/6.828/2018/jos.git lab
提交答案的方法:
第一部分:熟悉x86嵌入语言,QEMU x86处理器,电脑的开机Bootstrap程序。
报错如上,原因是:没有32-bit gcc multilib。解决方法:安装gcc-multilib 包。参考 https://zoomadmin.com/HowToInstall/UbuntuPackage/gcc-multilib
sudo apt-get update -y
sudo apt-get install -y gcc-multilib
再次make
使用obj/kern/kernel.img
作为模拟机的虚拟硬盘
make qemu-nox
退出方法:先输出control a,抬起后,再输入x
可用命令
物理空间如下
BIOS,内存64KB
早期:存在ROM,但是现在存在闪存中。
作用:初始化,装载操作系统。
ROM-BIOS
一个:make qemu-nox-gdb
另一个:make gdb
384KB地址空间,从0xA0000 - 0xFFFFF(0x5FFFF),
计算内存空间:
1KB = 1024B, 384KB = 393216B,0x5FFFF转为16进制是393215
BIOS的作用:
操作系统初始化、检查安装内存的数量、load操作系统
最近的x86处理机可以支持超过4GB的物理RAM。
JOS只用前256MB的物理内存
- ROM BIOS
打开两个终端窗口
窗口1:
开启QEMU make qemu-nox-gdb
但是没有gdb的指令的话不会开始
窗口2:
make gdb
上图是启动之后最开始执行的指令的反汇编
第二部分:测试boot loader
- sector 扇区
512byte
是硬盘的最小操作粒度
从硬盘或软盘中:
当BIOS发现一个bootable的软盘或硬盘之后,它会将512byte的扇区装入内存(物理地址0x7c00 - 0x7dff),再通过jmp指令设置CS:IP(0000:7c00),将控制权交给boot loader。
从CD-ROM中:
sector的大小是2048byte,并且BIOS可以load更大的boot image从硬盘到内存中。
- 本节课程
采用硬盘boot模式,boot loader的大小需要在512 byte之内。
boot loader包含:一个汇编语言源文件boot/boot.S,一个C源文件boot/main.c。
第三部分: JOS
xv6 源码
https://pdos.csail.mit.edu/6.828/2018/xv6/xv6-rev11.pdfxv6 手册
https://pdos.csail.mit.edu/6.828/2018/xv6/book-rev11.pdf
- PC嵌入语言
AT&T与Intel的转换
- 阅读材料
https://pdos.csail.mit.edu/6.828/2018/reference.html
总网址:https://pdos.csail.mit.edu/6.828/2018/schedule.html
答案参考1
https://www.jianshu.com/p/782cb80c7690