首页 > 其他分享 >操作系统学习笔记

操作系统学习笔记

时间:2023-08-20 17:35:18浏览次数:43  
标签:调用 操作系统 用户 笔记 学习 file 进程 用户程序

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

标签:调用,操作系统,用户,笔记,学习,file,进程,用户程序
From: https://www.cnblogs.com/duuuuu17/p/17644287.html

相关文章

  • 学习Java的第17天
    Scanner进阶使用packagecom.yue.scanner;importjava.util.Scanner;publicclassDemo04{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);//**从键盘接收数据**inti=0;​floatf=0.0f;System.out.println("请输入整数:"......
  • c++ 丢失笔记 [运算符重载、this指针、复制与拷贝构造、生存周期、箭头操作符]
    运算符重载、this指针、复制与拷贝构造、生存周期、箭头操作符有一部分是学校的OJ里做题需要就提前学了,然后没记笔记,有一部分是笔记丢了。不打算补这些笔记。不过还是在这里mark一下++运算符的重载。因为++运算符可以前置也可以后置,所以这里需要注意一下,如果是后置++,需要一个in......
  • C语言 笔记 1
    指针有什么用?场景A通过函数交换两个变量的值eg.交换变量a,b的值intswap(int*a,int*b){ inttemp=0; temp=*a; *a=*b; *b=temp;}场景B返回结果有多个,或return返回状态,指针返回结果intdivide(inta,intb,float*res){ intret=1; if(b!=0){ *res......
  • C语言 笔记2
    枚举常量符号化我们可以用下面代码将常量符号化constintred=0;constintyellow=1;constintblue=2;用枚举可以简写成enum=colors{red,yellow,blue};此时,red=>0,yellow=>1,blue=>2枚举枚举是一种用户定义的数据类型,他用关键词enum以如下语法来声明......
  • C语言 笔记4
    全局变量定义在函数外部的变量是全局变量。全局变量具有全局的生存期和作用域全局变量与任何函数都无关在任何函数内部都可以使用全局变量不能使用变量给全局变量初始化不初始化的全局变量默认为NULL函数内的同名变量会隐藏全局变量inta=1;{ inta=2; { in......
  • C语言 笔记3
    可变数组设计一个Array库,提供数组初始化,数组数据查看和修改的功能,且数组大小可变。array.h/*可变数组*///array_block,每次触发自动增长时增长的数量,记作一个array_block#defineARRAY_BLOCK10typedefstruct{intsize;int*array;}Array;Arrayarr......
  • C语言 笔记5
    格式化输入输出输入-printfprintf("%[flags][width][.prec][hlL]type...",参数表...);返回值输出的字符数flagFlag含义-左对齐+给一个正数强制加一个+号(space)正数留空0左边补零,不能和左对齐同时使用width和precwidth含义number......
  • 论文解读:《ccctc结合因子介导的染色质环形成序列模式的深度学习》
    所属分类:SCI  生物期刊名: JOURNALOFCOMPUTATIONALBIOLOGY2021年影响因子/JCR分区:1.479/Q4文章:DeepLearningofSequencePatternsforCCCTC-BindingFactor-MediatedChromatinLoopFormation|JournalofComputationalBiology代码与数据集:GitHub-BioDataLearning/......
  • 「Python」第一阶段第七章笔记
    函数的多返回值"""函数的多返回值"""defmy_return():return1,2x,y=my_return()print(x,y,type(x),type(y))函数的多种传参方式"""函数的多种传参方式-位置-参数-缺省-不定长"""#位置传参形参实参位置对应defadd(a=0,b=0)......
  • 「Python」第一阶段第五章笔记
    函数的初体验"""函数的初体验"""name="OrzMiku"print(f"{name}这个名字有{len(name)}个字符长")函数的定义"""函数的定义def函数名(参数表):函数体return返回值"""defsayHello():print("HelloW......