操作系统原理与实践(1)—引论

操作系统原理与实践(1)—引论

本内容参考的是汤小丹编著的《计算机操作系统》第四版,初衷在于能够完成每节课的学习总结和期末的复习巩固。希望能够帮助大家总结知识点。它对于程序员作为软件开发而言,是必不可少的了解计算机底层工作原理的参考教材,对发展软件人才犹如如虎添翼。

以下内容部分会有参考别的文章的地方,但是基本上都是结合教材手敲写作,所以如有需要修改的地方,请批评指正。
当然,相比于原著,我会首先在本篇写作完毕的后续内容通过自己的写作技巧能力自行绘图,其次是会参考额外的知识点比如说我国当前的计算机操作系统的短板和目标等等知识来丰富大家的知识点,培养一点点学习计算机操作系统的兴趣,谢谢大家的支持。

文章目录

  • 操作系统原理与实践(1)—引论
    • 引文
    • 1、操作系统的目的和作用
      • 1.1 操作系统的目标
      • 1.2 操作系统的应用
        • 1、OS作为用户与计算机硬件系统之间的接口
        • 2、OS作为计算机系统资源的管理者
        • 3、OS实现了对计算机资源的抽象
      • 1.3 推动操作系统发展动力的主要动力
    • 2、我国操作系统的发展历程(了解)
      • 2.1 启蒙阶段
      • 2.2 发展阶段
      • 2.3 壮大阶段(至今)
    • 3、操作系统的基本特性
      • 3.1 并发
        • 3.1.1 并发与并行
        • 3.1.2 引入进程
      • 3.2 共享
        • 3.2.1 互斥共享方式
        • 3.2.2 同时访问方式
      • 3.3 虚拟
        • 3.3.1 时分复用技术
        • 3.3.2 空分复用技术
      • 3.4 异步
    • 4、操作系统的主要功能
      • 4.1 处理机管理功能
      • 4.2 存储器管理功能
      • 4.3 设备管理功能
      • 4.5 操作系统与用户之间的接口
      • 4.6 现在操作系统的新功能
    • 5、OS结构设计
      • 5.1 传统操作系统结构
        • 5.1.1 无结构操作系统
        • 5.1.2 模块化结构OS
        • 5.1.3 分层式结构OS
      • 5.2 客户/服务器模式
      • 5.3 面向对象的程序设计
      • 5.4 微内核OS结构
    • 总结

引文

操作系统:即配置在计算机硬件上的第一层软件,是对硬件系统的第一次扩充。其主要作用在于如下:

  1. 管理好这些设备
  2. 提高设备的利用率和系统的吞吐量
  3. 为用户和应用程序提供一个简单的接口以便于用户使用

1、操作系统的目的和作用

首先,存在及作用。操作系统的目的与应用环境有关。

1.1 操作系统的目标

  1. 方便性
  2. 有效性
  3. 可扩充性
  4. 开放性

1.2 操作系统的应用

1、OS作为用户与计算机硬件系统之间的接口

在这里插入图片描述

如上图所示,操作系统的存在方便了用户使用计算机。用户可以通过系统调用、命令操作系统和图标-窗口三种方式进行与操作系统的通信。

2、OS作为计算机系统资源的管理者

在最开始的时候讲到的操作系统的主要作用就是管理设备。计算机系统形象的将资源分成四类:处理机、存储器、I/O设备以及文件。

3、OS实现了对计算机资源的抽象

在这里插入图片描述

如上图所示,操作系统对于计算机资源的抽象在于——用户不需要了解底层的设计实现原理,因为对于操作系统而言已经将一个功能业务加以细节化和具体化,此时相比于无操作系统(左图)而言,因为有了I/O设备管理软件(右图),用户只看到的是功能更强,更方便的计算机。

1.3 推动操作系统发展动力的主要动力

1、不断提高计算机资源利用率

2、方便用户

3、器件的不断更新换代

4、计算机体系结构的不断发展

5、不断提出新的应用需求

2、我国操作系统的发展历程(了解)

这里我将额外介绍我国操作系统发展的历程,大家可以稍微了解一下课外的知识点,并且了解我国操作系统的现状等等。

2.1 启蒙阶段

我们知道,软件在我们的发展方针加大其实是在天河一号的时候才有被关注到,当时的“重硬轻软”使得当时超级计算机无法能够发挥其效能。

首先在1983年,中国第一款PC机操作系统CCDOS便诞生了。

而后在改革开放后的时间点。以曾培炎同志为首在出访期间关注到COBRA操作系统,并在回国后初步探讨并提出打造我国自主版权操作系统。经专家探讨,制定了以UNIX为技术路线的计划并成功在“八五”攻关计划中正式立项。

前一段时间过后,由我国提出的COSIX1.0操作系统正式在1989-1993期间提出并完善,并在1994-1995期间正式提出包括中文、微内核和系统安全等特色功能的COSIX V2.0操作系统。这一阶段,国产操作系统更多是以概念学习与初步尝试为主,停留在实验室阶段

2.2 发展阶段

尽管COSIX项目出色填补了我国操作系统研究的空白,但是基于UNIX的操作系统技术路线已不再适应时代潮流。而打着“开源”为主的Linux半路杀出。

我国开始以Linux内核为主的基本技术路线,并且脱离实验室阶段转而以实用化阶段为主。

2.3 壮大阶段(至今)

该阶段下由于经历了众多因素的干预,国产的操作系统发展趋于常态化,冷静化。并且市场的优胜略汰逐步的将一些产品淘汰出去。但是剩下扎实的,运营合理的国产操作系统得到进一步的发展——中标麒麟就是其中一个。

比如2016年,麒麟操作系统就成为我国首款服务民航核心业务的国产操作系统

2020年第一台火星探测飞行器——天问一号

麒麟操作系统正在发挥其强大的功能。

当然,自从中兴事件的曝光,揭露了我国操作系统的短板。一个个我国有名的高新技术企业受到技术封锁下闯出一条血路,借助国产化项目工程,从实用化阶段迈向市场化。但是总体而言,我国的操作系统发展会越来越壮大。

3、操作系统的基本特性

前面并没有提及操作系统的发展历程,但是不管是多道批处理系统、分时系统和实时系统,都或多或少有一些共同的特性。

3.1 并发

3.1.1 并发与并行

并发强调的是时间片的轮换,交替执行。然而在时间片轮换过程中对于使用程序的用户来说错觉上就感觉是同时运行的。比如说我们爬山通常就是爬一会儿山歇息看一下风景,歇息完毕后又立刻爬山…(以此套娃),这种事务的轮换就跟并发无异议。

并行强调的是真的就是同时运行。比如说有一辆缆车给你爬山,你此时可以边爬山边看风景,这就是并行。

3.1.2 引入进程

在一个未引入进程的系统中,在属于同一个应用程序的计算程序和I/O程序之间只能是顺序执行

但是对内存中的多个程序都分别建立一个进程,它们就可以并发执行,这样便能极大地提高系统资源的利用率,增加系统的吞吐量。

3.2 共享

在操作系统中,OS环境下的资源共享或者称之为资源复用,是指系统中的资源可供内存中多个并发执行的进程共同使用。但是系统的资源是少于多道程序的请求的,所以从这里宏观看来其实是限定了时间(进程在内存期间)和地点(内存)。

3.2.1 互斥共享方式

互斥共享方式在于设备间,可以提供多个线程使用,但是在一段时间内只允许一个进程访问该资源。

3.2.2 同时访问方式

同时共享方式是指系统中的某些资源,允许一个时间段内由多个进程“同时”对它们进行访问。

3.3 虚拟

在操作系统中把某种技术将一个物体实体变成若干个逻辑上的对应物的功能称之为虚拟。

3.3.1 时分复用技术

时分复用技术能够提高资源利用率的根本原因在于,它利用某一个设备为一用户服务的空闲时间,又转去为其他非用户服务使得设备得到最充分的利用。

3.3.2 空分复用技术

其实跟”时分复用“类似,就是将存储器的空闲空间分区域的存放和运行其他程序,以此来提高内存的利用率

3.4 异步

异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

当然,有异步就有同步的概念。

同步的定义:是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么,这个进程将会一直等待下去,直到收到返回信息才继续执行下去。

其中这两者的主要区别在于:1、同步是阻塞的,异步是不阻塞的。2、异步是彼此独立的,同步是按顺序进行的。

4、操作系统的主要功能

操作系统的目的就是前面总结的一样:作为用户与计算机之间的接口、作为计算机系统资源的管理者、实现了对计算机资源的抽象。

4.1 处理机管理功能

处理机的分配单位以进程为基本单位

1、进程控制——通过创建和撤销进程并将之分配或者撤销相应的资源,使作业能够提高并发执行。

2、进程同步——设置进程同步机制来为多个进程的运行进行协调,使得多个进程能够有条不紊的进行。

3、进程通信——通过进程通信来实现相互合作进程之间的信息交换,以完成一组相互合作的进程在共同完成一个共同任务时,能够共享信息。

4、调度(包括作业调度和进程调度)

作业调度:作业调度的基本任务在于从后备队列中根据一定的算法选择出若干个作业并为他们分配运行时所需要的资源,为这些作业调入内存后为它们创建进程以让它们成为可能获得处理机的就绪状态并插入到就绪队列中。

进程调度:从进程的就绪队列中按照算法选出一个进程将处理机分配给它们并设置运行现场并投入执行。

4.2 存储器管理功能

存储器的主要任务在于为程序的运行提供良好的环境,以提高存储器的利用率并且方便用户使用。当然存储器要能够从逻辑上为自身进行扩充内存。它的功能要求在于能够:内存分配和回收、内存保护、地址映射、内存扩充。

1.内存分配和回收

内存分配的任务在于如下:

  1. 为每道程序分配内存空间使得程序的执行都有相应的内存空间作为支撑。
  2. 提高存储器的利用率,尽量减少不可用的内存空间。
  3. 允许运行的程序申请额外的(附加的)内存空间,以适应程序和数据动态增长的需要

其中针对内存分配中,我们在使用创建虚拟机经常能够看到设置内存的相关选项,以下是OS的两种内存分配方式:

  • 静态分配方式:每个作业的内存空间是在作业装入时就确定。在作业装入后的整个运行期间不允许该作业再申请新的内存空间。
  • 动态分配方式:每个作业的内存空间虽然也是是在作业装入时就确定的,但是在作业装入后的运行期间允许申请新的内存空间,也允许作业在内存中”移动“。

2.内存保护

内存保护的任务是:1、确保每道用户程序都仅仅在自己的内存空间内运行,彼此互不干扰。2、不允许用户程序访问操作系统的程序和数据,以及不允许用户程序转移到非共享的其他应用程序中执行。

所以通过设置内存保护机制,以完成内存保护的功能。其中简单的内存保护机制就是设置两个界限寄存器。

3.地址映射

地址的映射在于将地址空间转换为内存的物理空间,将逻辑地址与物理地址相对应。

4.内存扩充

内存扩充在于从逻辑上扩充内存容量使得用户能够感受到内存容量比实际内存容量要大。这能够方便用户程序并发执行,并且能够更好的进行内存分配。这既能够满足用户的需要,又能够改善产品的性能。

内存扩充机制的实现功能如下所示:

  • 请求调入功能:系统允许在仅仅装入部分用户数据、程序的情况下就能启动程序进行。在程序运行的状态下若要继续运行时所需要的程序和数据尚未装入内存,可以向操作系统发出请求,OS从磁盘调入内存以继续使用。
  • 置换功能:若内存已经没有足够的内存空间来装入所需要调入的数据和程序,此时OS能够从内存中的一部分不用的程序或者数据调到磁盘中以腾出内存空间,然后将需要调入得到部分装入到内存中。

4.3 设备管理功能

设备管理功能在于完成用户进程时提出的I/O请求,为用户进程分配所需要的I/O设备,完成指定的I/O操作。

设备管理功能同样应该提高CPU和I/O设备的利用率,提高I/O速度,为用户提供方便的I/O。

1.缓冲管理

在I/O和CPU之间引入缓冲,可以有效的缓和CPU和I/O设备的速度不匹配的矛盾以提高CPU的利用率,进而提高系统吞吐量。

2.设备分配

设备分配的基本任务在于根据用户进程的I/O请求、系统现有的资源情况以及按照某种设备分配策略,为之分配其所需要的设备

3.设备处理

设备处理程序的基本任务在于实现CPU和设备控制器之间实现通信,即CPU向设备控制器提供I/O命令,要求它完成指定的I/O操作。

4.文件管理系统

文件管理的任务在于对用户文件和系统文件进行管理以方便用户使用,保证文件的安全性。因此文件管理应该具备有文件存储空间的管理、目录管理、文件的读/写管理以及文件的共享保护

1.文件存储空间的管理

文件系统对文件以及文件的存储空间实施统一的管理,它在于为每个文件分配必要的外存空间,提高外存的利用率以提高内存系统的存、取速度。

2.目录管理

目录管理的主要任务是为各个文件建立一个目录项,包括文件名,文件属性,文件在磁盘上的物理位置等,并且为众多的目录加以有效的组织以实现方便的按名存取。目录管理还应该实现文件共享、提供快速的目录查询的手段以提高对文件检索的速度。

3.文件的读/写管理和保护

文件的读/写管理是根据用户的请求,从外存中提取数据或者将数据写入到外存。

文件保护是为了防止系统中的文件被非法窃取或者破坏,所以文件保护应该实现以下目标,即防止未经核准的用户存取文件、防止冒名顶替存取文件、防止不正确的方式使用文件。

4.5 操作系统与用户之间的接口

1、用户接口

为了便于用户直接或者间接地控制自己的作业,操作系统向用户提供命令接口。该接口进一步又分为联机用户接口、脱机用户接口和图形用户接口三种。

  • 联机用户接口:由一组键盘操作命令以及命令解释器组成。当用户在终端或者控制台上键入一条命令后,系统便立即转入命令解释程序,对该命令加以解释执行。
  • 脱机用户接口:为批处理作业的用户提供。用户用作业控制语言对对作业进行控制和干预的命令事先写在作业说明书上,OS会调用命令解释解释程序对作业说明书的命令逐条释放执行直至遇到作业结束语句时,系统才会停止作业的运行。
  • 图形用户接口:图形用户接口采用图形化的操作界面,用非常容易识别的各种图标来将系统各项功能、应用程序和文件直观、逼真地表示出来。

2、程序接口

程序接口是为了用户程序在执行中访问系统资源而设置的,是用户程序取得操作系统服务的唯一途径。

4.6 现在操作系统的新功能

1、系统安全

系统安全包括以下保障安全的几个技术,即:

  • 认证技术
  • 密码技术
  • 访问控制技术
  • 反病毒技术

2、网络的功能和服务

网络操作系统应该具备以下多方面的功能:

  • 网络通信
  • 资源管理
  • 互用户操作

3、支持多媒体

一个支持多媒体的设备应该能像一般OS处理文字、文字信息那样去处理音频和视频等多媒体信息。

  • 接纳控制功能
  • 实时调度
  • 多媒体文件的存储

5、OS结构设计

软件工程的目标在于开发软件的产品应该具有良好的软件质量和合理的费用。目前软件质量通过以下几个指标进行评价:功能性、有效性、可靠性、易使用性、可维护性和易移植性。

软件开发技术的不断发展促进了OS结构的更新换代。在书上将无结构的OS、模块化结构的OS、和分层式结构的OS都统称为传统结构的OS,将微内核结构的OS称为现代结构的OS。

5.1 传统操作系统结构

5.1.1 无结构操作系统

早期开发操作系统时,设计者更多的将注意力放在功能的实现和获得高的效率上,它缺乏一致的设计思想。因为采用为数众多的一组过程的集合,每个过程可以相互调用其他过程,使得操作系统的内部既复杂又混乱。

当时的OS设计技巧只看中如何编制紧凑的程序,以便于有效的利用内存。

5.1.2 模块化结构OS

模块化设计是基于分解模块化的原则来控制大型软件的复杂度。如下是模块化结构的操作系统:

在这里插入图片描述

这个设计方法称之为模块—接口法。

模块接口法的关键问题是模块的划分和规定好模块之间的接口。在划分模块上,主要充分考虑模块的独立性问题。衡量模块的独立性有以下两个标准:

  • 内聚性:指的是模块内部各部分间联系的紧密程度。
  • 耦合性:指的是模块间相互联系和相互影响的程度。

这种设计方法的优点:

  • 提高OS的正确性、可理解性和可维护性
  • 增强OS的可适应性
  • 加速OS的开发过程

其缺陷也同样明显:

  • 设计中对各模块间的接口规定很难满足在模块设计完成后对接口的实际需求。
  • 各种决定的“无序性”。

5.1.3 分层式结构OS

将模块-接口法中“决定顺序”的无序性变为有序性,引入了有序分层法,分层法的设计任务是,在目标系统An和裸机系统(又称宿主系统)A0之间,铺设若干个层次的软件A1、A2、A3、…、An-1,使An通过An-1、An-2、…、A2、A1层,最终能在A0上运行。

分层结构的优点:

  • 易保证系统的正确性。
  • 易扩充和易维护性。

缺点:分层结构的主要缺点是系统效率降低。由于层次结构是分层单向依赖的,必须在每层之间都建立层次间的通信机制,OS每执行一个功能,通常要自上而下地穿越多个层次,这无疑会增加系统的通信开销,从而导致系统效率的降低。

5.2 客户/服务器模式

客户/服务器系统主要由三部分组成。

(1) 客户机
(2) 服务器
(3) 网络系统

客户/服务器之间的交互

(1) 客户发送请求消息。
(2) 服务器接收消息。
(3) 服务器回送消息。
(4) 客户机接收消息。

客户/服务器模式的优点

(1) 数据的分布处理和存储。
(2) 便于集中管理。
(3) 灵活性和可扩充性。
(4) 易于改编应用软件。

5.3 面向对象的程序设计

在这里插入图片描述

面向对象技术的优点:

(1) 通过“重用”提高产品质量和生产率。
(2) 使系统具有更好的易修改性和易扩展性。
(3) 更易于保证系统的“正确性”和“可靠性”。

5.4 微内核OS结构

微内核的概念

1、足够小的内核

内核是指精心设计的、能实现现代OS最基本核心功能的小型内核。

微内核并非是一个完整的OS,而只是将操作系统中最基本的部分放入微内核。

2、基于客户/服务器模式

由于客户/服务器模式具有非常多的优点,所以在单机微内核操作系统中几乎无一例外地都采用客户/服务器模式,将操作系统中最基本的部分放入内核中,而把操作系统的绝大部分功能都放在微内核外面的一组服务器中实现。

3、应用“机制与策略分离”原理

现在操作系统的结构设计中,经常利用“机制与策略分离”的原理来构造OS结构。

机制,是指实现某一功能的具体执行机构。

策略,则是在机制的基础上借助于某些参数和算法来实现该功能的优化,或达到不同的功能目标。

4、采用面向对象技术

操作系统是一个极其复杂的大型软件系统,我们不仅可以通过结构设计来分解操作系统的复杂度,还可以基于面向对象技术中的“抽象”和“隐蔽”原则控制系统的复杂性,再进一步利用“对象”、“封装”和“继承”等概念来确保操作系统的“正确性”、“可靠性”、“易修改性”、“易扩展性”等,并提高操作系统的设计速度。

微内核的优点:

  1. 提高系统的可扩展性
  2. 增强了系统的可靠性
  3. 可移植性强
  4. 提供了对分布式系统的支持
  5. 融入了面向对象技术

微内核存在的问题:

  • 微内核操作系统的运行效率有所降低。
  • 会引起更多的上下文切换

总结

以上是操作系统的了解,后续会讲述进程的描述,当然会因为后续(比如下一篇的进程描述)内容的繁多分开编写,再次感谢大家的访问阅读。

热门文章

暂无图片
编程学习 ·

Java输出数组的内容

Java输出数组的内容_一万个小时-CSDN博客_java打印数组内容1. 输出内容最常见的方式// List<String>类型的列表List<String> list new ArrayList<String>();list.add("First");list.add("Second");list.add("Third");list.ad…
暂无图片
编程学习 ·

母螳螂的“魅惑之术”

在它们对大蝗虫发起进攻的时候&#xff0c;我认认真真地观察了一次&#xff0c;因为它们突然像触电一样浑身痉挛起来&#xff0c;警觉地面对限前这个大家伙&#xff0c;然后放下自己优雅的身段和祈祷的双手&#xff0c;摆出了一个可怕的姿势。我被眼前的一幕吓到了&#xff0c;…
暂无图片
编程学习 ·

疯狂填词 mad_libs 第9章9.9.2

#win7 python3.7.0 import os,reos.chdir(d:\documents\program_language) file1open(.\疯狂填词_d9z9d2_r.txt) file2open(.\疯狂填词_d9z9d2_w.txt,w) words[ADJECTIVE,NOUN,VERB,NOUN] str1file1.read()#方法1 for word in words :word_replaceinput(fEnter a {word} :)str1…
暂无图片
编程学习 ·

HBASE 高可用

为了保证HBASE是高可用的,所依赖的HDFS和zookeeper也要是高可用的. 通过参数hbase.rootdir指定了连接到Hadoop的地址,mycluster表示为Hadoop的集群. HBASE本身的高可用很简单,只要在一个健康的集群其他节点通过命令 hbase-daemon.sh start master启动一个Hmaster进程,这个Hmast…
暂无图片
编程学习 ·

js事件操作语法

一、事件的绑定语法 语法形式1 事件监听 标签对象.addEventListener(click,function(){}); 语法形式2 on语法绑定 标签对象.onclick function(){} on语法是通过 等于赋值绑定的事件处理函数 , 等于赋值本质上执行的是覆盖赋值,后赋值的数据会覆盖之前存储的数据,也就是on…
暂无图片
编程学习 ·

Photoshop插件--晕影动态--选区--脚本开发--PS插件

文章目录1.插件界面2.关键代码2.1 选区2.2 动态晕影3.作者寄语PS是一款栅格图像编辑软件&#xff0c;具有许多强大的功能&#xff0c;本文演示如何通过脚本实现晕影动态和选区相关功能&#xff0c;展示从互联网收集而来的一个小插件&#xff0c;供大家学习交流&#xff0c;请勿…
暂无图片
编程学习 ·

vs LNK1104 无法打开文件“xxx.obj”

写在前面&#xff1a; 向大家推荐两本新书&#xff0c;《深度学习计算机视觉实战》和《学习OpenCV4&#xff1a;基于Python的算法实战》。 《深度学习计算机视觉实战》讲了计算机视觉理论基础&#xff0c;讲了案例项目&#xff0c;讲了模型部署&#xff0c;这些项目学会之后可以…
暂无图片
编程学习 ·

工业元宇宙的定义与实施路线图

工业元宇宙的定义与实施路线图 李正海 1 工业元宇宙 给大家做一个关于工业元宇宙的定义。对于工业&#xff0c;从设计的角度来讲&#xff0c;现在的设计人员已经做到了普遍的三维设计&#xff0c;但是进入元宇宙时代&#xff0c;就不仅仅只是三维设计了&#xff0c;我们的目…
暂无图片
编程学习 ·

【leectode 2022.1.15】完成一半题目

有 N 位扣友参加了微软与力扣举办了「以扣会友」线下活动。主办方提供了 2*N 道题目&#xff0c;整型数组 questions 中每个数字对应了每道题目所涉及的知识点类型。 若每位扣友选择不同的一题&#xff0c;请返回被选的 N 道题目至少包含多少种知识点类型。 示例 1&#xff1a…
暂无图片
编程学习 ·

js 面试题总结

一、js原型与原型链 1. prototype 每个函数都有一个prototype属性&#xff0c;被称为显示原型 2._ _proto_ _ 每个实例对象都会有_ _proto_ _属性,其被称为隐式原型 每一个实例对象的隐式原型_ _proto_ _属性指向自身构造函数的显式原型prototype 3. constructor 每个prot…
暂无图片
编程学习 ·

java练习代码

打印自定义行数的空心菱形练习代码如下 import java.util.Scanner; public class daYinLengXing{public static void main(String[] args) {System.out.println("请输入行数");Scanner myScanner new Scanner(System.in);int g myScanner.nextInt();int num g%2;//…
暂无图片
编程学习 ·

RocketMQ-什么是死信队列?怎么解决

目录 什么是死信队列 死信队列的特征 死信消息的处理 什么是死信队列 当一条消息初次消费失败&#xff0c;消息队列会自动进行消费重试&#xff1b;达到最大重试次数后&#xff0c;若消费依然失败&#xff0c;则表明消费者在正常情况下无法正确地消费该消息&#xff0c;此时…
暂无图片
编程学习 ·

项目 cg day04

第4章 lua、Canal实现广告缓存 学习目标 Lua介绍 Lua语法 输出、变量定义、数据类型、流程控制(if..)、循环操作、函数、表(数组)、模块OpenResty介绍(理解配置) 封装了Nginx&#xff0c;并且提供了Lua扩展&#xff0c;大大提升了Nginx对并发处理的能&#xff0c;10K-1000K Lu…
暂无图片
编程学习 ·

输出三角形

#include <stdio.h> int main() { int i,j; for(i0;i<5;i) { for(j0;j<i;j) { printf("*"); } printf("\n"); } }
暂无图片
编程学习 ·

stm32的BOOTLOADER学习1

序言 最近计划学习stm32的BOOTLOADER学习,把学习过程记录下来 因为现在网上STM32C8T6还是比较贵的,根据我的需求flash空间小一些也可以,所以我决定使用stm32c6t6.这个芯片的空间是32kb的。 #熟悉芯片内部的空间地址 1、flash ROM&#xff1a; 大小32KB&#xff0c;范围&#xf…
暂无图片
编程学习 ·

通过awk和shell来限制IP多次访问之学不会你打死我

学不会你打死我 今天我们用shell脚本&#xff0c;awk工具来分析日志来判断是否存在扫描器来进行破解网站密码——限制访问次数过多的IP地址&#xff0c;通过Iptables来进行限制。代码在末尾 首先我们要先查看日志的格式&#xff0c;分析出我们需要筛选的内容&#xff0c;日志…
暂无图片
编程学习 ·

Python - 如何像程序员一样思考

在为计算机编写程序之前&#xff0c;您必须学会如何像程序员一样思考。学习像程序员一样思考对任何学生都很有价值。以下步骤可帮助任何人学习编码并了解计算机科学的价值——即使他们不打算成为计算机科学家。 顾名思义&#xff0c;Python经常被想要学习编程的人用作第一语言…
暂无图片
编程学习 ·

蓝桥杯python-数字三角形

问题描述 虽然我前后用了三种做法&#xff0c;但是我发现只有“优化思路_1”可以通过蓝桥杯官网中的测评&#xff0c;但是如果用c/c的话&#xff0c;每个都通得过&#xff0c;足以可见python的效率之低&#xff08;但耐不住人家好用啊&#xff08;哭笑&#xff09;&#xff09…