头像

yukino




离线:3天前


最近来访(87)
用户头像
Abrac
用户头像
yemuzhe
用户头像
欣0613
用户头像
xjtu_zfw
用户头像
Behappyeveryday
用户头像
云梦passion
用户头像
Combat_Ranger
用户头像
Wiselnn
用户头像
一只野生彩色铅笔
用户头像
Cuberxp
用户头像
DPH
用户头像
雷霆尬拔
用户头像
怎样共勉_7
用户头像
坐在高数上看拉格朗日
用户头像
whale77
用户头像
可然冫
用户头像
Taurus_
用户头像
OI
用户头像
翩竹
用户头像
@王


yukino
6个月前

第一章计算机系统概述

操作系统的概念与功能

概念

  • 负责管理协调硬件、软件等计算机资源,为上层用户、应用程序提供简单易用的服务,是一种系统软件

功能和目标

  • 资源的管理者

    • 处理机管理
    • 存储器管理
    • 文件管理
    • 设备管理
  • 向上层提供服务

    • 普通用户

      • GUI用户图形界面
      • 命令接口

        • 联机命令接口

          • 小黑窗就是一种交互式命令接口
        • 脱机命令接口

    • 程序员

      • 程序接口

        • 即系统调用
  • 对硬件机器的扩展

    • 通常把覆盖了软件的机器称为扩充机器,又称为虚拟机

操作系统的特征

并发

  • 并发性是指程序宏观上同时运行,微观上交替运行。
  • 随着多道程序技术而出现的,因此操作系统和程序并发是一起诞生的
  • 单核CPU同一时刻只能执行一个程序,各个程序只能并发执行,多核可以并行
  • 操作系统最基本的特性

共享

  • 资源共享,系统中的资源可供内存中多个并发执行的进程共同使用,是第二基本的特征
  • 两种方式

    • 互斥共享
    • 同时共享

      • 一个时间段内多个进程“同时”访问

        • 大多数情况这个同时是宏观上的

虚拟

  • 把一个物理上的实体变为若干逻辑上的对应物。用于实现虚拟的技术称为虚拟技术
  • 虚拟处理器技术

    • 时分复用技术
  • 虚拟存储器技术

    • 空分复用技术

异步

  • 多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性

OS的发展与分类

手工操作阶段

批处理阶段

  • 单道批处理系统

    • 引入脱机输入/输出,并由监督程序负责控制作业的输入、输出
    • 缺点

      • 内存中仅有一道程序运行
      • CPU有大量的时间是在空闲等待I/O完成
  • 多道批处理系统

    • 每次往内存中读入多道程序,并发执行
    • 缺点

      • 用户响应时间长

        • 提交作业后就只能等待计算机处理完成,中间不能对其进行控制
      • 没有人机交互功能

分时操作系统

  • 计算机以时间片为单位轮流为各个用户/作业服务
  • 优点

    • 解决了人机交互问题
  • 缺点

    • 不能优先处理一些紧急任务

实时操作系统

  • 优点

    • 能够优先响应一些紧急的任务
    • 及时性和可靠性
  • 两类

    • 硬实时系统

      • 必须在绝对严格的规定时间内完成处理
    • 软实时系统

      • 能接受偶尔违反时间规定

        • 12306

网络操作系统

  • 把网络中各个计算机有机结合起来,实现数据传送,实现网络中各种资源的共享和各台计算机之间的通信

分布式操作系统

  • 分布性和并行性
  • 各台计算机地位相同,并行协同完成任务

个人计算机操作系统

运行机制

两种指令

  • 特权指令
  • 非特权指令

两种处理器状态

  • 内核态(核心态、管态)

    • 此时运行的是内核程序,可以执行特权指令

      • PSW(程序状态寄存器)其中有个位1表示内核态,0表示用户态。
      • 开机的时候就是处于内核态
      • 用户态到内核态由中断引发,硬件自动完成变态过程,触发中断信号意味着系统强行夺回CPU的使用权
  • 用户态(目态)

    • 运行的是应用程序,只能执行非特权指令

两种程序

  • 内核程序

    • 操作系统最核心的部分,操作系统可以只有内核,但操作系统的功能不一定全在内核中,例如GUI
    • 管理者
  • 应用程序

    • 只能使用非特权指令
  • CPU能判断出一条指令时特权还是非特权

中断和异常

中断的作用

  • 操作系统夺回CPU使用权的唯一途径
  • 没有中断,就没有并发

中断的类型

  • 内中断(“异常”)

    • 与当前执行的指令有关,中断信号来源于CPU内部。CPU执行指令的时候会检查
    • 例子

      • 陷入指令

        • 应用程序主动请求系统内核的服务时会执行一条特殊的指令,会引发一个内部中断
        • 应用程序主动把CPU控制权交给操作系统
        • 例如系统调用
        • 注意不是特权指令
      • 故障(fault)

        • 错误引起的,可能被内核程序修复,修复完后把CPU使用权还给应用程序。例如缺页故障
      • 中止(abort)

        • 致命错误,不会把CPU还给应用程序。执行非法指令例如除数0、用户态执行特权指令
  • 外中断

    • 与当前执行的指令无关,中断信号来源于CPU外部
    • 每一条指令执行结束时(指令周期末尾),CPU会例行检查是否有外部中断信号。
    • 例子

      • 时钟中断

        • 时钟部件发来的中断信号
      • I/O中断

        • 输入输出设备发来中断信号
  • 不少教材中的中断是指外中断,而把内中断叫做异常

中断机制基本原理

  • 不同的中断信号需要不同的中断程序处理。CPU检测到中断信号后,会根据中断信号的类型去查询“中断向量表”,来找到中断处理程序在内存中的位置

系统调用(广义指令)

应用程序可以通过系统调用来请求获得操作系统内核的服务

凡是与资源有关的操作,都必须通过系统调用的方式向操作系统内核提出服务请求。

按功能分类

  • 设备管理
  • 文件管理
  • 进程控制
  • 进程通信
  • 内存管理

操作系统体系结构

大内核/单内核/宏内核

  • 与硬件紧密关联
  • 优点

    • 高性能
  • 缺点

    • 内核代码庞大,结构混乱,难以维护

微内核

  • 一些系统资源管理功能更多的是对数据结构的操作,不直接涉及硬件,因此有些人将其从内核中去掉,
  • 优点

    • 内核功能少,结构清晰易维护
  • 缺点

    • 需要频繁地在核心态和用户态之间切换,性能低


新鲜事 原文

yukino
6个月前
玩了好多天,有点后悔... 感觉要来不及准备复试了--


活动打卡代码 工程课 Linux-7.1. homework_1

yukino
6个月前
//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~


活动打卡代码 工程课 Linux-7.0. homework_0

yukino
6个月前
//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~


活动打卡代码 AcWing 823. 排列

yukino
7个月前
n = int(input())
used=[False for i in range(n+1)]
cur=[]
def dfs(u,cur,n):
    if u==n+1:
        for i in cur:
            print(i,end=' ')
        print()
        return
    for i in range(1,n+1):
        if not used[i]:
            cur.append(i)
            used[i]=True
            dfs(u+1,cur,n)
            cur.pop()
            used[i]=False

dfs(1,cur,n)    



活动打卡代码 AcWing 756. 蛇形矩阵

yukino
7个月前
n,m=map(int,input().split(' '))

res=[[0 for j in range(m)] for i in range(n)]
dx=[-1,0,1,0]
dy=[0,1,0,-1]

x=0
y=0
d=1
for i in range(1,m*n+1):
    res[x][y]=i
    a,b=x+dx[d],y+dy[d]
    if a<0 or a>=n or b<0 or b>=m or res[a][b]:
        d=(d+1)%4
    x,y=x+dx[d],y+dy[d]

for i in range(n):
    for j in range(m):
        print(res[i][j],end=' ')
    print()




yukino
7个月前
op=input()
a=[]
for i in range(12):
    a.append(list(map(float,input().split(' '))))

sum=0.0
t=0
for i in range(12):
    for j in range(i+1,12):
        sum+=a[i][j]
        t+=1
if op =='M':
    print("%.1lf"%(sum/t))
else:
    print("%.1lf"%(sum))


活动打卡代码 AcWing 726. 质数

yukino
7个月前
from math import*
def is_prime(x):
    if x < 2:
        return False;
    for i in range(2,int(sqrt(x))+1):
        if x%i==0:
            return False
    return True
n=int(input())
for i in range(n):
    x=int(input())
    if is_prime(x):
        print("%d is prime"%(x))
    else:
         print("%d is not prime"%(x))


活动打卡代码 AcWing 721. 递增序列

yukino
7个月前
while True:
    x=int(input())
    if x == 0:
        break
    for i in range(1,x+1):
        print(i,end=' ')
    print()



活动打卡代码 AcWing 760. 字符串长度

yukino
7个月前
s=input()
print(len(s))