Skip to content

9月17日学习笔记

lirui edited this page Sep 17, 2020 · 4 revisions

19.5 Linux IO子系统

Linux IO Architecture:

最上面是提供的系统调用接口,其中一部分接口用于与IO设备打交道,内部结构分为两部分,一部分是文件系统,Linux中一切皆是文件,IO子系统是作为文件系统下面的一个组成部分,连接到整个系统内核当中,并通过文件系统对上提供服务的,文件系统之下有Buffer Cache,对于块设备来说,需要有这个部分,设备分为了块设备和字符设备,对于网络设备来说是独立的,这里有复杂的网络协议栈的处理,它的设备驱动与前面两类稍微有些不同

块设备,作为文件系统的一部分来使用,实际文件系统也是存在磁盘上,磁盘也是一种块设备,通过文件系统的系统调用接口,通过文件系统的系统调用接口读信息,缓存里有的直接给结果,缓存里没有的,才会产生IO请求,访问直接的设备,分配相应的资源,等待设备给出相应结果,返回回来,整个读写完成

对于网络协议栈来说,中间有复杂的网络协议层,对上也提供socket接口,socket内部提供传输层(TCP、UDP)、网络层(IP、ARP、ICMP)的内容,

Device Driver:与硬件打交道的软件程序,由设备开发厂商写,对上提供的接口与文件系统接口同

操作系统内核会提供相应的功能,设备驱动程序需要和内核的其它模块打交道,例如内存的分配和回收,如涉及到队列维护,就是调度

设备初始化,设备模块初始化,模块使用完后的清除

打开、关闭、读写

与内核耦合关系太紧密,很可能导致内核的麻烦

IO ports reservations

Interrupt Handler Registration:注册中断处理例程

Memory Allocations 存储分配

Data Transfer between User/Kernel 内核态与用户态交换数据

API requirements

Driver functions return positive ints on success, negative ints on failure

Kernel won't call non-blocking IO functions if previous request still pending

Every kernel function that calls kmalloc() should be reentrant

common mistakes:locking, interrupt time, resource allocation

中断的屏蔽和使能,尽可能快地处理完,把中断打开,以便减少对别人的影响

很多地方用spin lock,也会用读写锁,根据维护的队列不同,采用不同的策略

整个内核加一个锁

如何保证正确、一致?

中断

中断服务例程起来之后,代码很多是不能做的,

资源分配和回收

Device Driver Programming

第二十讲 内核与程序设计语言

20.1 Linux内核错误分析

OS bug与语言有什么关系

bug/error在什么地方,生命周期有多长

空指针、内存分配少了、死锁、没有屏蔽中断,没有释放内存,浮点数、与size相关

Driver出错的概率要大一些,隔离bug,fix bug

Singularity 微软新的内核,C#语言重写,但是两处如今如人意,1、performance;2、向下兼容

Mike Swift:Nooks, Microdrivers, Carbon

Tanenbaum: Minix 3

UNSW: Dingo+Termite

Gun Sirer: Reference Validation

Microsoft: Singularity + Signed Drivers

20.2.1 用rust写操作系统 编程语言Rust

size不会变化的适合放在stack,size会变化,数据空间会回收的,会申请的适合放在heap里面

ownership:对于每一个Rust中的值,都有一个变量来指向它,变量称之为owner,访问到这个变量,就相当于访问到这个值,

对于某一个值而言,在一个时刻,只有一个owner

当超出了作用域,这个owner所管理的value会被丢弃,这个owner也不存在了

20.2.2 rust与操作系统开发

代数系统支持error处理

宏也做的很好

面向底层系统

安全

社区和生态

写OS还需要runtime chaacteristics

建议:改一部分,不改全部,设计与其它部分其它语言的互操作

significant functionality

高性能,高安全

OpenSBI

Clone this wiki locally