操作系统概述(一、并发)

操作系统概述题库 网络课课后题 1、下列关于操作系统的叙述中,哪一个是错误的? A、操作系统管理着计算机系统中的各种资源 B、操作系统应为用户提供良好的界面 C、操作系统是计算机系统中的一个应用软件(系统软件) D、操作系统向用户屏蔽了硬件操作细节 解析: 2、下列关于批处理操作系统的叙述中,哪一个是正确的? A、批处理操作系统的系统资源利用率不高 B、批处理操作系统的系统吞吐量小 C、... 阅读详情

系列文章目录



前言

操作系统广义上讲可以是…非常广

这里只讨论狭义上的操作系统,如Windows、Linux

定义

操作系统是负责管理软硬件资源,为应用程序和用户提供服务的 系统的 大型 软件。

所以说,操作系统和普通的软件没有本质区别,只不过它会直接操纵硬件资源;当程序员想要申请128byte的内存空间时,只需要调用通过系统提供的API即可,而不是自行编写申请内存空间的程序,所以说操作系统为程序和用户提供服务。


一、操作系统发展史

1940s的程序

此时并不需要操作系统,也不存在这种概念。用户只需要将写好的一沓沓纸带(程序)放入计算器,然后计算器就会自动执行纸带上的指令,输入结果。

就像51单片机,把程序烧录进内存,然后单片机器执行程序中的指令,输出结果,并不需要操作系统。

1950s的计算机

为了管理多个用户的程序,引入操作系统的概念:operator(操作系统)jobs(任务)system系统

此时一个FORTRAN程序就是一沓卡片,卡片上不同的孔位代表不同的指令,多个程序就需要非常多沓的卡片。操作系统要做的就是上一沓卡片执行完后将下一沓卡片“拿”过来执行。为所有程序提供API,如将结果保存到另一沓卡片上。

  • “批处理系统”+库函数API
  • DOS Disk Operating Systems
    • 操作系统中开始出现“设备”、“文件”、“任务”等对象和API

1960s的计算机

集成电路、总线出现

  • 更快的处理器
  • 更快更大的内存;虚拟存储器出现
    • 可以同时载入多个程序而不用“换卡”了
  • 更丰富的IO设备;完善的中断/异常机制

内存变大,可以将多个程序都放入内存中。但是,只有一个CPU。通常程序在执行期间并不全程使用CPU,而是存在不使用CPU的空闲期。

能载入多个程序到内存且灵活调度它们的管理程序,包括程序可以调用的API

  • 有了进程process的概念
  • 进程在执行IO时,可以将CPU让给另一个进程
    • 在多个地址空间隔离的程序之间切换
    • 虚拟存储使一个程序出bug不会crash真个系统

操作系统中自然增加进程管理的API

基于中断(如时钟)机制

  • 时钟中断:使程序在执行时,异步地插入函数调用
  • 由操作系统(调度策略)决定是否要切换到另一个程序执行

1970s+ 基本和现代一样了

others

tldr 是比 man 更易于阅读使用的帮助文档

二、

程序状态模型

数字电路在做的事情:

  1. 设置运行所需初值,初值了来源可以是其它电路(包括自身电路)输出的也可以是什么东西设置的
  2. 运行电路
  3. 为了方便显示,做一些操作可能是printf也可能是其它的

1.2.3步在时钟周期的控制下重复进行,可能是每来一个周期信号就进行一步

从不同视角看程序:

程序是状态机:
每执行一条指令,堆栈的状态就会改变,所以的程序指令在指示堆、栈以及各种指针的状态该如何变化。

程序是二进制的指令
gdb可以从两个视角,C or 汇编 的角度调试程序

程序调用syscall,将程序当前的状态移交给操作系统。

操作系统上的程序

程序 = 状态机 = 计算 --> syscall --> 计算 --> …
用户程序只能做一些计算操作,通过系统调用来完成硬件访问等操作。

操作系统负责管理所有的硬件软件资源

  • 只能用操作系统允许的方式访问操作系统中的对象
  • 这是为了“管理多个状态机”所必须的

gdb
strace

三、线程库

并发的基本单位:线程

  • 执行流拥有独立的堆栈/寄存器
  • 共享全部的内存(指针可以相互引用)

在终端的输出是乱序的可以用 | sort 试试

原子性的丧失

顺序

宽松内存模型

编译器有编译优化,x86处理器自身也有优化

四、程序并发

五、自旋锁与互斥锁的实现

互斥算法:Dekker/Peterson

实现互斥的根本困难:不能同时读和写共享内存

  • load(环顾四周)的时候不能写,只能“看一眼就把眼睛闭上”
    • 看到的东西马上就过时了
  • store(改变物理世界状态)的时候不能读,只能“闭着眼睛动手”
    • 也不知道把什么改成了什么

假设硬件能为我们提供一条“瞬间完成”的读+写指令

#include </stdatomic.h>提供了一些原子操作,可以利用xchg实现自旋锁。
  所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。
  原子性不可能由软件单独保证–必须需要硬件的支持,因此是和架构相关的。在x86 平台上,CPU提供了在指令执行期间对总线加锁的手段。CPU芯片上有一条引线#HLOCK pin,如果汇编语言的程序中在一条指令前面加上前缀"LOCK",经过汇编以后的机器代码就使CPU在执行这条指令的时候把#HLOCK pin的电位拉低,持续到这条指令结束时放开,从而把总线锁住,这样同一总线上别的CPU就暂时不能通过总线访问内存了,保证了这条指令在多处理器环境中的原子性。
  总结:某条原子指令一旦被执行,必须有且仅有一个线程完整地执行它

int tables = YES;

void lock(){
retry:
  int got = xchg(&table, NOPE);
  if (got == NOPE)
    goto retry;
  assert(got == YES)
}
void unlock(){
  xchg(&table, YES);
}
int locked = 0;
void lock(){ while(xchg(&locked, 1));}
void unlock() { xchg(&locked, 0); }

自旋锁的使用场景

  1. 临界区几乎不“拥堵”
  2. 持有自旋锁时禁止执行流切换

使用场景:操作系统内核的并发数据结构(短临界区)

  • 操作系统可以关闭中断和抢占
    • 保证锁的持有者在很短的时间内可以释放
  • (虚拟机。。。)
    • PAUSE指令会触发VM Exit

六、并发控制:同步 (条件变量、信号量、生产者-消费者

信号量

#include <iostream>
#include <thread>
#include <thread>
#include <semaphore.h>
#include <unistd.h>

sem_t sem_a;
sem_t sem_b;
sem_t sem_c;
int a = 1;
int b = 2;
int c = 3;

class NumCnt
{
private:
  /* data */
public:
  static void fun1()
  {
    goto entry;
    while (1)
    {
      sem_wait(&sem_c);
      entry:
      std::cout << a << "thread id : " << std::this_thread::get_id() << std::endl;
      a += 3;
      sem_post(&sem_a);
      usleep(1000*1000);
    }
  }
  static void fun2()
  {
    while (1)
    {
      sem_wait(&sem_a);
      std::cout << b<< "thread id : " << std::this_thread::get_id() << std::endl;
      b += 3;
      sem_post(&sem_b);
      usleep(1000*1000);
    }
  }
  static void fun3()
  {
    while (1)
    {
      sem_wait(&sem_b);
      std::cout << c<< "thread id : " << std::this_thread::get_id() << std::endl;
      c += 3;
      sem_post(&sem_c);
      usleep(1000*1000);
    }
  }
};
int main()
{
  sem_init(&sem_a, 0, 0);
  sem_init(&sem_b, 0, 0);
  sem_init(&sem_c, 0, 0);
  std::thread th1(NumCnt::fun1);
  std::thread th2(NumCnt::fun2);
  std::thread th3(NumCnt::fun3);
  th1.join();
  th2.join();
  th3.join();
}

 

打印括号问题,要求打印的括号必须匹配:(正确的)

  void Productor()
  {
    while (1)
    {
      sem_wait(&sem_m);  // 左括号最大允许数量
      std::cout << "(";
      sem_post(&sem_par); // 生产出了多少个
    }
  }
  void Customer()
  {
    while (1)
    {
      sem_wait(&sem_par);  // 好生产出了,开始消费
      std::cout << ")";
      sem_post(&sem_m);   // 消费了一个,最大生产5个,消费了一个那么还有一个坑位让生产者生产
    }
  }

信号量设计的重点

  • 考虑每一单位的资源是什么?谁创造?谁获取?
  • 在“单一位资源”明确的问题上更好用

条件变量

  • 将自旋转变为睡眠,在完成操作时唤醒

条件变量:

  • wait(conditional_variable, mutex)
    • 调用时必须保证已经获得mutex
    • 释放mutex、进入睡眠状态
  • signal/nofity(conditional_variable)
    • 如果有线程在等待cv,则唤醒其中一个线程
  • broadcast/nofityAll(cv)
    • 唤醒全部正在等待cv的线程

下面的代码在多生产者多消费者时会出bug,需要两个条件变量
有BUG的:

int n, cnt;
条件变量cv, 锁lck
void Tproduce()
{
  mutex_lock(&lck);
  if (cnt == n) cond_wait(&cv, &lck);
  printf("(");
  cnt++;
  cond_signal(&cv);
  mutex_unlock(&lck);
}
void Tconsume()
{
  mutex_lock(&lck);
  if (cnt == 0) cond_wait(&cv, &lck);
  printf(")");
  cnt--;
  condi_signal(&cv);
  mutex_unlock(*lck);
}
  1. 两个条件变量: 略
  2. while循环: 如下代码
    mutex_t lk = MUTEX_INIT();
    cond_t cv = COND_INIT();
    
    void Tproduce()
    {
      while(1){
        mutex_lock(&lk);
        while(!(count != n)){
          cond_wait(&cv, &lk);
        }
        // lock is held
        printf("(");
        count++;
        cond_broadcast(&cv);
        mutex_unlock(&lk);
      }
    }
    void Tconsume()
    {
      while(1){
        mutex_lock(&lk);
        while(!(count != 0)){
          cond_wait(&cv, &lk);
        }
        printf(")");
        count--;
        cond_broadcast(&cv);
        mutex_unlock(&lk);
      }
    }
    
  • example:
    struct job{
      void (*run)(void *arg);
      void *arg;
    };
    while(1){
      struct job* job;
      mutex_lock(&lk);
      while(job != get_job()){
        wait(&cv, &lk);
      }
      mutex_unlock(&lk);
      job->run(job->arg); // 不需要持有锁
                          // 可以生成新的job
                          // 注意回收分配的资源
    }
    

吃饭问题

  • 分布式系统中非常常见的解决思路(master-slave)
// slave 线程,可以有多个
void Tphilosopher(int id)
{
  send_request(id, EAT);
  P(allowed[id]);  // 等待是否继续往下执行
  程序处理
  send_request(id, DONE);
}

// master 进程,只有一个
void Twaiter()
{
  while(1){
    id, status = receive_request();
    if (status == EAT) {...}
    if (status ++DONE) {...}
  }
}

设计原则:easy to use, simple to think

  • 不要做任何优化,先写出来
  • 实现同步的方法
    • 条件变量、信号量;生产者-消费之模型
    • job queue可以实现几乎任何并行算法

七、高并发编程

高性能计算的主要挑战:

  • 计算图需要容易并行化
  • 线程间如何通信

 

数据中心主要挑战:

  • 数据要保持一致(Consistency)
  • 服务器时刻保持可用(Availability)
  • 容忍机器离线(Partition tolerance)

 

工具:

  • 线程

    • 线程切换简单记为:1.保存当前状态机的所有寄存器 2. 读取下一个线程的状态
  • 协程

    • 多个可以保存/恢复的执行流
    • 比线程更轻量(完全没有系统调用,也就没有操作系统状态)
      #include <stdio.h>
      int count = 1;
      void entry(void *arg){
        for (int i= 0; i < 5; i++){
        printf("%s[&d] ", (const char*)arg, count++);;
        co_yield(); // 切换协程
        }
      }
      int main(){
        struct co *co1 = co_start("co1", entry, "a");
        struct co *co2 = co_start("co2", entry, "b");
        co_wait(co1);
        co_wait(co2);
      }
      

     

Goroutine:概念上是线程,实际是线程和写成的混合体

  • 每个CPU上有一个Go Worker,自由调度goroutines
  • 执行到blocking API时(如sleep,read)
    • Go Worker偷偷改成non-blocking的版本
      • 成功 -> 立即继续执行
      • 失败 -> 立即yield到另一个需要CPU的goroutine
        • 十分巧妙,CPU和操作系统全部用到100%

八、并发bug, 如何修bug

根本原因:编程语言的缺陷
软件是需求(约规)在计算机数字世界的投影
计算机是负责“翻译”代码,不管和实际需求(约规)是否匹配

防御性编程:
把程序需要满足的条件用 assert 表达出来(打个log)

eg:
在这里插入图片描述

assert  y.left == x; y.right == c; x.left == a; x.right == b;

当写出如下代码:

int* p = (void*)0x23ae3;
*p = 1;

如果是非内核程序,操作系统会帮助用户检查p的值是否合法;如果是操作系统内核,则会默默执行此操作,从而不知在何时引发严重问题。

并发bug:死锁(deadlock)

所有线程都在相互等待。

死锁产生的四个必要条件(Edward G. Coffman, 1971):四个条件缺一不可

  • 互斥:
  • 请求与保持:
  • 不剥夺:
  • 循环等待:

 

并发控制工具:

  • 互斥锁 - 原子性
  • 条件变量 - 同步

 
gcc -fsanitize=address

动态程序分析:

  • 在事件发生时记录
  • 解析记录检查问题
  • 付出代价和权衡

动态程序分析工具:

  • AddressSanitizers: 非法内存访问
  • ThreadSanitizer:数据竞争
  • MemorySanitizer:未初始化的读取
  • UBSanitizer:undefined behavior

奇怪的知识

msvc中debug mode 的 guard/fence/canary
- 未初始化栈:0xcccccc
- 未初始化堆:0xcdcdcd
- 对象头尾:-0xfdfdfdfd
- 已回收内存:0xddddd

总结

生产者消费者模型还得是信号量(还是要具体问题具体分析)

 

自旋锁 -> 互斥锁 -> 条件变量 -> 信号量
自旋锁的实现需要依赖原子操作,而原子操作单靠软件是无法实现的,需要硬件提供支持。

【操作系统期末速成】①操作系统概述 >再比如如果要你直接用硬件(如电路、高低电压)来算一个“1+1”,一般人非常难操作 -> 让人直接操作硬件是一件非常难的事情 -> 若我们直接使用“计算器”,输入“1+1=”,这是一般人都能学会干的事情 -> 也就是说。->比如你想喝水,你得先找到河流,再制作一个盛水的工具才能喝 -> 为了过的更好,要建立各种各样的基础设施、城市、工厂、农场、铁路、公路、机场、飞机、电 -> 这些基础设施其实就是操作系统 ->举个栗子:如果把你放在一个非常原始的森林中,有湖泊、高山、森林、丛林野兽等等,你能生活得好吗? 阅读详情

相关推荐

【操作系统】操作系统概述

操作系统概述,批处理阶段,操作系统的完善,多道批处理系统,分时系统,实时处理系统,通用操作系统,特性,并发、共享、虚拟、异步,操作系统的运行环境,操作系统的界面形式,操作系统的运行机理

m0_74195626的博客 2113

操作系统导论:并发

本节详细讲述了并发的问题以及锁的过程

weixin_57341232的博客 1188

CTF---Web---文件包含---01

文章目录前言一、题目描述二、解题步骤1.查看源代码2.文件包含(/etc/passwd)3.解码总结 前言 题目分类: CTF—Web—文件包含 一、题目描述 题目:提示寻找passwd文件 二、解题步骤 1.查看源代码 提示所有图片存储路径是download.php?name=img, 此时name参数的存在就提示此题可能为“文件包含”。 2.文件包含(/etc/passwd) 两种查看方式: 2.1、访问view-source:http://192.168.87.180/download.php

qq_22160557的博客 1391

【操作系统】详细解读操作系统的四大特征:并发、共享、虚拟、异步

【操作系统】第一章——计算机系统概述 详细介绍操作系统的基本特征——并发、共享、虚拟和异步

蒙奇D索大的博客 7643

从收音机到Arduino:手把手教你用BJT三极管搭建一个简易音频放大器(附电路图与元件清单)

本文详细介绍了如何使用BJT三极管搭建简易音频放大器,涵盖电路原理、元件选择、设计步骤及调试技巧。通过实践项目帮助电子爱好者深入理解BJT的放大特性,并提供与Arduino结合的扩展应用方案,适合创客和DIY玩家。

aitie1479的博客 443

网络安全学习路线是怎样的?

为什么要学习安全? 近几年网络安全事件层出不穷,相信大家哪怕没遇到过,但也听过不少了吧。如服务器遭受入侵被黑,用户帐号被盗;被钓鱼、勒索病毒等,这些一旦发生,对企业而言都是不小的打击。因此,网络安全不容忽视,同时随着时代的不断发展,公司对于运维及网络工程师要求也越来越严格。未来越来越吃香的一定是技能方向广的复合型人才。网络安全可以说是一条非常好的发展道路。 今年两会期间,全国政协委员,360集团创始人、董事长周鸿祎提交了关于网络安全行业特殊人才的提案,为广大白帽子人员争取更好...

网安技术分享 8698

操作系统的概念、并发和并行的区别、操作系统的发展和分类

操作系统(Operation System ,OS)是指控制和管理真个计算机系统的硬件和软件资源,并合理的调度计算机的工作和资源的分配。

宁可枝头抱香死,何曾吹落北风中。 1723

UBUNTU使用RTL8811CU网卡(包含树莓派)

下载驱动 从绿联中下载:链接 下载解压后,chmod Linux文件夹 sudo chmod -R 777 ./Linux/ 修改系统的BOOT Secure为disable,参考链接:链接 sudo apt install mokutil sudo mokutil --disable-validation 重启电脑后,按照提示选择change secure boot state,并输入对应的字母(并不是全部密码,而是第几个),选择disable即可 进入Linux文件夹,运行命令 ..

Hot_Ant的博客 6247

操作系统基本特性:并发、共享、虚拟、异步

并发、共享、虚拟和异步是操作系统的一些基本特性,它们共同构成了现代操作系统的高效和灵活的特点。通过这些特性,操作系统可以管理和协调复杂的计算任务,充分利用计算机的资源,并为用户提供一个高效、便捷的计算环境。希望这篇博客可以帮助你更好地理解操作系统的工作原理和基本特性。

JAZJD的博客 2264

Android16 RK3576 Bluetooth source和sink模式切换

摘要:本文介绍了在RK3576平台上实现蓝牙A2DP模式动态切换的修改方案。通过在device配置文件中添加A2DP Sink相关属性,修改Bluetooth模块代码实现:1)在Config.java中增加persist.bluetooth.rka2dpsink属性控制模式切换;2)修改A2dpSinkStreamHandler.java取消音频焦点限制;3)调整btif_a2dp_sink.cc默认授予音频焦点。最终通过设置persist.bluetooth.rka2dpsink属性为true/false

tzj1058756809的博客 862

40、5G NR射频要求解析

本文详细解析了5G NR射频相关要求,包括参考灵敏度与动态范围的定义、接收机对干扰信号的抗扰性要求(如阻塞、邻道选择性等)、辐射射频要求在FR1和FR2频段的差异,以及多标准无线电基站(MSR)的发展及其对射频要求的影响。内容涵盖测试模型、干扰场景、具体指标和实现挑战,为理解和应用5G NR射频规范提供了全面指导。

qsc901234的博客 245

计算机基础之操作系统——并发

检测和恢复死锁的方法是允许系统进入死锁状态,然后定期检测死锁,并在发现死锁后采取措施解决。执行多个任务的能力。并行的目标是加速任务的完成速度,通过将任务分解为更小的部分并在多个处理器或核心上同时执行,以实现更快的任务执行速度。银行家算法是一种著名的避免死锁的算法,通过模拟资源分配过程来判断是否会产生死锁,如果会产生死锁,则拒绝分配资源。并发的目标是在有限的资源下实现任务之间的有效调度,从而最大限度地提高系统的响应事件。同时处理多个任务的能力。: 预防死锁的方法是破坏死锁产生的四个条件中的一个或多个。

qq_45444343的博客 1338

Allegro如何使用Cross Copy命令快速复制器件的位号和丝印外形其他层

在Allegro做PCB设计的时候,如果需要复制器件的位号到其它层是无法直接实现的,如果直接拷贝器件的位号的话,效果如下。但是Allegro的Cross Copy命令是支持复制任何属性的图形到其它层的,下面以复制器件位号和丝印外框为例说明。同样如果使用Z-copy命令,也是无法Z-copy text的,Finds下方texts是灰色的。如何使用Cross Copy命令快速复制器件的位号和丝印外形其他层。另外cap处可以选择线段的端点是圆形,八角形,或者方形的铜皮。拷贝C1013,出现的是C*

weixin_54787054的博客 2672

【操作系统】一、操作系统概述:基本特征(并发、共享、虚拟、异步)、中断、异常、接口、系统调用、体系结构

系统调用是运行在用户模式的程序请求操作系统内核提供服务的一种方式,比如文件操作、进程控制、网络访问等。所以库函数会使用系统调用来实现功能,没有使用系统调用的库函数,它的执行效率通常要比系统调用的高。在裸机上安装的操作系统,可以提供资源管理功能和方便用户的服务功能,将裸机改造成功能更强、使用更方便的机器。实时操作系统的主要特点是。“中断”会使CPU由用户态变为内核态(用户态→核心态),使操作系统重新夺回对CPU的控制权。库函数其实是封装了系统调用的(也有简单的库函数没有封装系统调用),系统调用更接近内核。

关注:https://github.com/Suhan42 2154

全局–局部傅里叶神经算子(GL-FNO):原理、严格推导与 PINN 混合策略

本文提出了一种全局-局部傅里叶神经算子(GL-FNO)及其与物理信息神经网络(PINN)的结合方法。主要内容包括: 架构设计:GL-FNO包含两个分支 - 全局分支处理低频结构,使用下采样输入;局部分支处理高频细节,使用全分辨率输入。两分支通过自适应门控机制融合。 理论分析:证明了GL-FNO在"低频全局+高频局部"任务上的优势,给出了误差分解和复杂度分析,并推导了与PINN结合时的渐进一致性条件。 实现方法:采用频谱微分计算物理残差,推导了完整的训练流程,包括数据损失与物理损失的联合优

VectorShift的博客 1334

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

操作系统概述

一、操作系统基本概念、特征、分类。 1、什么是操作系统 操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件。 从操作系统的概念上可以看出: 操作系统是系统资源的管理者(资源包括软件、硬件、文件等) 作为用户和计算机硬件之间的接口 向上层提供方便易用的服务 操作系统是最接近硬件的一种系统软件 原文链接:https://blog.youkuaiyun.com/dyw

Xiao_DANDAN110的博客 9674

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

操作系统——考研笔记(一)操作系统概述

概念:操作 系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理得组织调度计算机的工作和资源的分配;一提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件。直观的例子:打开Windows操作系统的“任务管理器”(快捷键:Ctrl+Alt+Del)知识点回顾:操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成。

weixin_73044854的博客 1539

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

王道操作系统笔记(一)—— 操作系统概述

一、操作系统基本概念 1.1 基本概念 1.2 四大特征 1.3 目标和功能 二、操作系统的分类与发展 三、操作系统的运行环境 3.1 运行机制 3.2 中断和异常 3.3 系统调用 四、操作系统的体系结构 4.1 宏内核与微内核 4.2 分层结构 4.3 模块化 4.4 外核 五、操作系统引导 六、虚拟机

秀岩的博客 2793

【操作系统】操作系统的概述

操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件。操作系统是系统资源的管理者向上层提供方便易用的服务是最接近硬件的一层软件windows10的任务管理器,如下图,可以较为直观的展示操作系统对计算机硬件和软件资源的管理。......

haoweixl的博客 8848

操作系统课堂笔记一-操作系统概述

文章目录操作系统概述简介一个完整的程序执行参考 操作系统概述 简介 本文主要针对操作系统里面一些原理进行剖析, 操作系统也可以说是程序员必经之路, 学的好坏会有本质的区别,尤其是大公司(BAT)的面试, 对操作系统有了解必然是极大的加分项, 个人认为国内讲的不错的一个老师-陈向群老师(北京大学), 我的大部分理论也是从她那里学来的, 博主会把一些关键点记录好给大家方便查看, 后期有时间会优化下结...

北大虫师的博客 2761

操作系统(一)操作系统概述

大纲 一、操作系统的概念 1. 操作系统的地位 从虚拟机的角度来看,软件是分层次的。系统和应用软件都可分层次,操作系统软件位于最底层。操作系统是对硬件部件的第一次扩充。(难道还有第二次?) 层次关系具有穿透性:高层软件可以调用所有低层的软件,并与硬件打交道。库调用:调用系统库;系统调用:调用操作系统;机器指令:调用硬件 2.操作系统的作用 3. 操作系统的定义 操作系统是位于硬件层之上、所有其他系统软件之下的一个系统软件,通过它来管理系统中的各种软件和硬件资源,使它们能被充分利用,方便用户使用计算

很注重数学和408 2479

操作系统概论【一】 - - 操作系统概述

文章目录一:什么是操作系统?操作系统的定义:操作系统的作用:二:操作系统的发展1.单道批处理系统:单道处理系统的特点:单道处理系统的缺点:2.多道批处理系统多道处理系统的特点:多道处理系统的缺点:3.分时操作系统分时操作系统的特点:分时操作系统的缺点:4.实时处理系统实时处理系统的特点:实时处理系统的缺点:操作系统产品现状:三:操作系统的特征四:操作系统的功能五:操作系统的体系结构六:指令的执行 ...

吴小迪的博客 1万+

一、操作系统概述

操作系统的概念(定义)功能和目标 操作系统的概念(定义) 操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组 织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中 最基本的系统软件。 操作系统的功能和目标 作为系统资源的管理者 补充知识:进程是一个程序的执行过程。执行前需要将该程序放到内存中,才能被CPU处理。 作为用户和计算机硬件之间的接口 命令接口:允许用户直接使用 程序接口:允许用户通过程序间接使用 GUI:

qq_46344220的博客 1015

【一】操作系统概述

计算机操作系统发展历程、功能目标、特征、运行机制、中断和异常、系统调用、体系结构...

Lov1_BYS的博客 600

操作系统笔记——概述、进程、并发控制

建议先自己看一看《计算机是怎么跑起来的》,操作系统和计算机网络都是先开发出系统,后出现的理论,所以建议从实践入手。我认为一门学科要先把他朴素的思想掌握,然后再深挖,否则你一上来就看现代操作系统,速度会很慢。硬件就是裸机,人要想操作就得用0101二进制码。操作系统,将对硬件的二进制指令封装起来,构成操作系统API系统应用建立在操作系统之上,是一些底层的应用,比如链接网络之类的应用程序建立在系统应用之上,编程语言可以调用系统应用或者操作系统底层,实现应用级操作。

亦梦亦醒乐逍遥的博客 3228
上一篇: GDB调试gdb
下一篇: c++输入输出文件操作stream
耶耶耶耶耶~
博客等级 码龄9年 943粉丝 153原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值