编译原理学习笔记(二十六)~文件+逻辑文件及其访问方式+文件目录+目录结构

200 阅读11分钟

「这是我参与11月更文挑战的第30天,活动详情查看:2021最后一次更文挑战

前言

Hello!小伙伴!

非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~

 

自我介绍 ଘ(੭ˊᵕˋ)੭

昵称:海轰

标签:程序猿|C++选手|学生

简介:因C语言结识编程,随后转入计算机专业,有幸拿过一些国奖、省奖...已保研。目前正在学习C++/Linux/Python

学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!

10.1 文件

1、不同的文件有不同的内部结构,一般可执行文件采用的文件结构是()。C A.复杂结构 B.变长记录结构 C.字符流 D.线性记录结构

2、文件根据其内容不同有不同的类型。在WINDOWS中,文件类型一般由扩展名决定,扩展名一般跟在主文件名后面,由()分隔。A A. B. - C.: D.@

3、文件操作包括()。ABCD A.写文件 B.读文件 C.删除文件 D.截断文件

4、用户通过文件名访问文件。

5、打开文件操作是一个文件系统中必须具有的操作。×

10.2 逻辑文件及其访问方式

1、()文件较为省存储空间。A A.顺序文件 B.直接文件 C.数据库文件 D.索引文件

2、面向用户的文件是()。C A.物理文件 B.目录 C.逻辑文件 D.用户文件

3、直接文件一般可以存放在()。ABD A.磁盘 B.U盘 C.磁带 D.光盘

4、一个索引文件的索引表有100万项,每个索引项放了指向该索引项对应的记录的首址(4个字节)和长度(1个字节)。每个记录长度不等,平均20个字节。如果现在读入第20万条记录的内容,平均需要从磁盘读入25个字节的数据。

5、一般而言,在所有的逻辑文件结构中,直接文件的访问效率最高。

10.3 文件目录

1、文件系统实现按名存取主要是靠()来实现。B A.查找位示图 B.查找文件目录 C.查找作业表 D.地址转换机构

2、在下图中,和用户“liang”属于同一组的用户对文件“a.txt”具有的访问权限是()。C 在这里插入图片描述

A.读 B.写 C.读和写 D.没有访问权限

3、一个目录项有1000个文件,每个文件的目录项为1.3KB,则这个目录文件需要()个8KB的物理块来存放。B A.162 B.163 C.1000 D.161

4、在访问文件时,需要根据文件名对目录文件进行检索,其检索性能主要由()决定。BCD A.文件大小 B.目录项数量 C.目录项的大小 D.目录项在目录中的位置

5、以下文件操作,不会访问文件本身内容的有()。ABC A.创建文件 B.设置文件读写权限 C.删除文件 D.截断文件

10.4 目录结构

1、计算机中,不允许两个文件名重名主要指的是() 。D A.不同磁盘的不同目录下 B.不同磁盘里的同名目录下 C.同一个磁盘的不同目录下 D.同一个磁盘的同一目录下

2、一个文件路径为C:\English\book\101.txt,其中的book是一个() 。B A.普通文件 B.目录文件 C.图书文件 D.文件名

3、以下目录结构中,不允许把文件分组的目录结构为()。C A.通用图目录 B.无环图目录 C.二级目录 D.树形目录

4、在文件系统中,打开文件的主要工作是创建一个目录项。×

5、通过相对路径只能访问工作目录及其子目录中的文件。×

进程的定义

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配、调度的基本单位 (若有线程,那么线程是调度的基本单位) 是操作系统结构的基础。

\

进程与程序

程序:指令、数据及其组织形式的描述

进程:程序的实体。

\

进程与程序的区别:

  • 进程是程序的一个实例,是程序的一次执行
  • 一个程序可对应一个或多个进程
  • 一个进程可对应一个或多个程序
  • 程序是进程的代码部分
  • 进程是活动实体,程序是静止实体
  • 进程在内存,程序在外存

进程的几种状态

  • 就绪:当进程已分配到除处理机以外的所有必要资源后,只要再获得处理机,便可立即执行,进入运行状态。
  • 运行:已经获得处理机及其它的运行资源,正在处理机上运行的进程处于运行状态。
  • 等待(阻塞):正在执行的进程由于某种运行条件不具备而暂停执行时,在等待某一事件的发生,此时进程处于等待状态,有时也被称为阻塞状态。致使进程等待的典型事件有:请求I/O、申请缓冲空间等。

状态转换图

注:

  1. 进程从等待状态到运行状态,必须经过就绪状态,而不能直接转换到运行状态。这是因为此进程等待的原因解除后,系统中可能有多个进程都处于可运行状态(就绪状态),因此系统必须按按照一定的算法选择一个就绪进程占用处理机。这种选择过程被称为进程调度(scheduler)。
  2. 一个进程由运行状态转变为等待状态一般是由运行进程自己主动提出的,例如,进程在运行过程中需要某一条件而不能满足时,就自己主动放弃处理机而使进程入等待状态。
  1. 一个进程由等待状态转变为就绪状态总是由外界事件引起的,而不是由该进程自己引起的。例如某一I/O操作完成,由I/O结束中断来解除等待此I/O完成的进程的等待状态,将其转换为就绪状态。

进程的静态描述

  1. 程序:指进程运行所对应的执行代码
  2. 数据集合:指程序加工的对象和场所。是进程运行中必须的数据资源,包括对CPU占用、存储器、I/O通道等的需求信息。
  1. 进程控制块(PCB) :系统为每个进程定义的一个数据结构。它包含了有关进程的描述信息、控制信息和资源信息,是进程动态特征的集中反映。

注:(1)和(2)两部分内容与进程的执行有关,大多数操作系统中,把这两部分内容放在外存中,直到该进程执行时再调入内存。

进程控制块(PCB)

定义

为了描述和控制进程的运行,系统为每个进程定义了一个数据结构-进程控制块PCB(Process Control Block)。它是操作系统中最重要的记录型数据结构。PCB中记录了操作系统所需的、用于描述进程的当前情况以及进程控制运行的全部信息。

作用

使一个多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。或者说操作系统是根据PCB来对并发执行的进程进行控制和管理的。

PCB中与进程有关的信息

  • 进程状态
  • 程序计数器
  • CPU寄存器
  • CPU调度信息
  • 内存管理信息
  • 记账信息
  • I/O状态信息

PCB是进程存在的唯一标志。


进程中父进程与子进程资源共享的三种方式

  1. 父进程、子进程共享所有的资源
  2. 子进程共享父进程资源的子集
  1. 父进程与子进程无资源共享

\

进程中父进程与子进程执行的两种方式

  1. 父进程与子进程并发执行
  2. 父进程等待,知道子进程终止

\

进程通信方式

  • 共享存储器
  • 消息缓冲
  • 管道通信

\

原子操作

定义:不会被打断的操作,一旦开始就一直运行到结束,中间不会有任何的上下文切换。

\

临界资源

定义:系统中某些资源具有一次仅允许一个进程使用的属性,我们称这样的资源为临界资源(Critical Resource)。

如一台打印机,若让多个进程任意使用,那么很容易发生多个进程的输出结果交织在一起的混乱情况,解决这一问题唯一的办法,就是一个进程提出打印申请后并得到许可后,打印机一直被它单独占用。如果在此过程中,另一进程也提出申请,那么它必须等待前一进程释放了打印机,才可使用。

\

线程的定义

一个进程内的基本调度单位

\

线程的结构

  • 代码和数据(来自进程)
  • 各类资源(来自进程)
  • 线程控制块(Thread Control Block,TCB)

线程控制块(TCB)

  • 线程ID
  • 程序计数器PC
  • 寄存器集
  • 栈空间

进程与线程的区别与联系

  1. 进程是系统资源分配的基本单位,线程是系统的基本调度单位。 线程中的实体基本上不拥有系统资源,只有一点必不可少的、能保证独立运行的资源,比如,在每个线程中都应具有一个用于控制线程运行的线程控制块TCB(Thread  Control Black)、用于指示被执行指令的程序计数器、保留局部变量、少数状态参数和返回地址的一组寄存器和堆栈。
  2. 进程不再是一个独立运行的基本单位,而是将线程作为一个独立运行的基本单位。 由于线程很“轻”,相对进程切换,线程的切换非常迅速且开销小。而且,进程的调度与切换都是由操作系统内核完成,而线程既可由操作系统内核完成,也可由用户程序完成。
  1. 一个系统中可以有多个进程,一个进程可以有一个或多个线程(至少有一个)。在系统中的所有线程都只能属于某一特定的进程。这些线程都能并发执行,但只有在多处理机系统中它们才能真正地并行运行。
  2. 在同一进程中的各个线程,都可以共享该进程所拥有的资源。
  1. 与传统的进程类似,线程可以创建子线程,在各线程之间也存在着共享资源和相互合作的制约关系,
  2. 线程运行时也具有三种基本的状态:运行、阻塞、就绪。

\

线程管理

两种方式

  • 用户态线程
  • 核心态线程(内核)

用户态线程

定义

由用户线程库进行管理的线程

关于

  • 内核看不到用户线程
  • 用户线程的创建和调度在用户空间中,不需要内核干预
  • 应用于传统的只支持进程的操作系统

代表

POSIX Pthreads、Win32 threads、Java threads

核心态线程

定义

内核进行管理的线程

关于

  • 需要内核支持
  • 由内核完成线程调度
  • 由内核进程创建和撤销

代表

Windows XP/2000、Solaris、Linux、Tru64 UNIX、Mac OS X

\

线程库

定义

为程序员提供API来创建和管理线程

两种模式

  • 用户库(用户线程)
  • 内核库(内核线程)

用户库

  • 存在于用户空间
  • 没有内核支持
  • 调用线程库不会产生系统调用

内核库

  • 存在于内核
  • 操作系统支持
  • 调用线程库会产生系统调用

\

线程总结

  • 可在CPU上运行的基本执行单位
  • 进程内的一个代码片段可以被创建成语一个线程
  • 线程状态:就绪、运行、等待等
  • 线程操作:创建、撤销、等待、唤醒等
  • 进程依旧是资源分配的基本单位
  • 线程自己不拥有系统资源,通过进程申请资源

\

为什么要引入线程?

答:由于进程是资源的拥有者,所以在创建、撤销、切换操作中需要较大的时空开销,限制了并发程度的进一步提高。为减少进程切换的开销,把进程作为资源分配单位和调度单位这两个属性分开处理,即进程还是作为资源分配的基本单位,但是不作为调度的基本单位(很少调度或切换),把调度执行与切换的责任交给“线程”。这样做的好处不但可以提高系统的并发度,还能适应新的对称多处理(SMP)环境的运行,充分发挥其性能。