持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情
为什么要学习操作系统
1.计算机基础,面试经常要考的辣
2.可以通过学习操作系统来增加内力
3.觉醒体内的编程力量
到底什么是操作系统
管理软/硬件资源的,为程序提供服务的程序
1950s到1960s的重大改变
大内存的概念:
可以同时多个程序放到内存中,但此时只有一个cpu
同时将多个程序载入内存是一项巨大的能力·有了进程(process)的概念
- 进程在执行I/O时,可以将CPU让给另一个进程·在多个地址空间隔离的程序之间切换
- 虚拟存储使一个程序出bug不会crash整个系统
操作系统中自然地增加进程管理API
今天的操作系统
通过“虚拟化”硬件资源为程序运行提供服务的软件。 空前复杂的系统之一
-
更复杂的处理器和内存
- 非对称多处理器(ARM big.LITTLE; Intel P/E-cores)
- Non-uniform Memory Access (NUMA)
- 更多的硬件机制Intel-VT/AMD-V,TrustZone/SGX, ,TSX,...
-
更多的设备和资源
- 网卡、SSD、GPU、FPGA...·
-
复杂的应用需求和应用环境
- 服务器、个人电脑、智能手机、手表、手环、loT/微控制器..
理解操作系统:三个根本问题操作系统服务谁?
-
程序〔状态机
-
课程涉及︰多线程Linux应用程序
(设计/应用视角)操作系统为程序提供什么服务?
- 操作系统=对象+API
- 课程涉及∶POSIX+部分Linux特性
(实现/硬件视角)如何实现操作系统提供的服务?
- 操作系统=C程序
- 完成初始化后就成为interrupt/trap/fault handler
- 课程涉及: xv6,自制迷你操作系统
怎么学操作系统
1.是一个合格的操作系统用户 - 会STFW/RTFM自己动手解决问题
- 不怕使用任何命令行工具
vim, tmux, grep, gcc, binutils,...
2.不惧怕写代码
-
能管理一定规模(数千行)的代码
-
能在出bug时默念“机器永远是对的、我肯定能调出来的”
-
然后开始用正确的工具/方法调试
给“学渣"们的贴心提示:补基础、补基础、补基础
-
操作系统没有传说中那么复杂
- 程序视角:对象+API
- 硬件视角:一个C程序 结果慎重考虑,决定先去学几天的c语言再回来看这个视频。视频中都是用c语言进行实现的,因此需要有c语言的基础才能更好的往下学习。等着,操作系统