操作系统学习笔记

发布时间 2023-08-20 17:23:17作者: duuuuu17

Stanford:

CS140使用操作系统概念

CS162使用操作系统:设计与原理

基础

操作系统发展史

原始操作系统

image-20230820150441945

在原始操作系统中,程序更多的是与硬件进行绑定,是一个无保护的标准服务库(为了方便用户或开发者使用而提供的一系列标准服务、函数或API)。

系统一次只能运行一个程序

多任务处理

image-20230820152546823

系统可以同时运行多个进程,当一个进程阻塞(等待硬盘,网络或用户输入)block时,运行另一个进程。

系统对进程操作不当会出现的问题:

  1. 死锁,一个进程永远占据CPU资源
  2. 使其他进程的私有资源遭到破坏

多用户操作系统

image-20230820152628694

通过保护机制来决定系统为不同的用户提供什么资源,以及实时为每个用户实际分配所需的硬件资源。

可能出现的问题:

  1. 当某个用户恶意占有过多的CPU资源时,其他用户无法使用,或被分配较少CPU资源
  2. 总内存使用量大于机器RAM。
  3. 避免因需求增加而导致响应时间的超线性增加

保护机制:

image-20230820155420047

通过设置抢占来避免发生死锁。通过介入和调解来控制程序和管理程序(其中使用了一种表格的数据结构,该表格包含有资源标识符、访问权限、时间限制,并发访问等其他策略)。利用角色管理,来控制权限和实际运行环境。

CPU抢占

防止CPU被独占的机制。

例如:内核将定时器编程为每10ms中断一次。

典型的操作系统结构

image-20230820161427572

操作系统被分为用户态和内核态运行环境:

  • 程序在用户级的进程中实例化运行
  • 而操作系统内核需要在特权模式下运行:
    • 创建/删除进程
    • 对硬件进行访问

系统调用

通俗:是用户程序能够调用系统提供的某些操作的接口。

官方解释:是操作系统提供给用户程序的一组接口,允许用户程序在运行过程中请求操作系统执行特权的操作。

比如:文件流的读写,进程的创建和删除,网络通信等操作

该功能及确保了用户的进程可访问系统提供的底层功能,又保障了操作系统的安全和稳定性。

通常来说,系统调用涉及以下相关概念:

  • 系统调用接口: 操作系统通过一组预定义的接口(通常是函数或指令)来暴露系统调用功能给用户程序。这些接口由操作系统提供,用户程序通过调用这些接口来请求特定操作。
  • 用户态和内核态: 大多数操作系统采用特权级别(例如用户态和内核态)来区分用户程序和操作系统的执行权限。用户态下运行的用户程序只能执行受限操作,而系统调用需要从用户态切换到内核态,以便操作系统执行特权操作。
  • 上下文切换: 当用户程序发起系统调用时,操作系统需要进行上下文切换,将用户程序的执行环境切换到内核态。这包括保存用户程序的状态、加载内核的状态,并执行所请求的系统调用。完成后,操作系统再将控制返回给用户程序。
  • 返回结果: 用户程序在执行系统调用时,请求操作系统完成某个任务,操作系统执行后会将结果返回给用户程序。这个结果可能是执行成功与否的标志,以及相关数据或状态信息。
  • 权限和安全性: 系统调用允许用户程序访问操作系统提供的底层功能,但操作系统会对这些功能进行权限管理。操作系统会检查用户程序的请求是否合法,以及用户是否有足够的权限执行该操作。

Unix文件系统调用

  • Applications “open” files (or devices) by name

    • I/O happens through open files
  • int open(char path, int flags, /int mode*/...);

    • flags: O_RDONLY, O_WRONLY, O_RDWR

    • O_CREAT: create the file if non-existent

    • O_EXCL: (w. O_CREAT) create if file exists already

    • O_TRUNC: Truncate the file

    • O_APPEND: Start writing from end of file

    • mode: final argument with O_CREAT

  • Returns file descriptor—used for all I/O to file

该系统调用发生错误时,返回:-1:打开失败;-2:没有这样的文件或目录;-13:权限被拒绝

使用perror函数打印人类可读类型的错误信息。

文件描述符(file description)

文件描述符,是指操作系统对某个文件进行操作时分配的唯一标识符。用于区别其他正在操作的文件。文件描述符仅描述已打开的文件。

而在Unix的存储系统中,文件的inode号是文件的唯一标识。这个唯一标识用于在文件系统层级上定位和管理文件。

  • read:返回读取的字节数
  • write:返回写入的字节数,错误时返回-1
  • off_t lseek:0开始,1当前,2结束
  • close

文件描述符由进程继承:即当一个进程创建另一个进程时,默认情况下具有相同fd。

操作系统在计算机结构扮演角色:

image-20230820144142141