软件开发技术基础 第4版 课件 第3章 操作系统及应用程序开发_第1页
软件开发技术基础 第4版 课件 第3章 操作系统及应用程序开发_第2页
软件开发技术基础 第4版 课件 第3章 操作系统及应用程序开发_第3页
软件开发技术基础 第4版 课件 第3章 操作系统及应用程序开发_第4页
软件开发技术基础 第4版 课件 第3章 操作系统及应用程序开发_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章操作系统及应用程序开发2024西安交通大学13.1操作系统概述3.1.1操作系统的概念操作系统是为管理计算机中的硬件和软件资源,合理组织计算机的工作流程,为用户提供功能丰富、使用方便的运行环境的一种系统软件。操作系统的功能包括五大模块:进程管理、存储管理、文件管理、设备管理和用户接口。西安交通大学23.1.2操作系统的类型单道批处理方式多道程序系统分时操作系统实时操作系统微机操作系统分布式操作系统嵌入式操作系统西安交通大学33.1.3常见操作系统简介1.Windows操作系统WindowsNT(Newtechnology)系列操作系统的体系结构西安交通大学4Windows编程的一些概念句柄消息事件MFC(MicrosoftFoundationClass,微软基础类库)tkinter、pyQT西安交通大学52.Ubuntu3.Android西安交通大学63.2操作系统的资源管理3.2.1进程管理1.程序的执行方式(1)顺序执行顺序性封闭性可再现性(2)并发执行间断(异步)性失去封闭性失去可再现性西安交通大学72.进程一个进程就是程序的一次执行,是操作系统进行资源调度和分配的独立单位。(1)进程的特点动态性并发性独立性异步性结构性制约性(2)进程的状态就绪状态运行状态等待状态西安交通大学8(3)进程的结构1)进程描述信息2)进程调度信息3)进程控制信息4)处理机状态信息(4)进程的调度1)先来先服务2)最短作业优先3)时间片轮转法4)多级队列5)优先级算法西安交通大学93.进程与程序区别进程是动态的,程序是静态的。进程是暂时的,程序是永久的。进程与程序的组成不同。进程与程序可以相互转化。西安交通大学103.2.2存储管理1.存储管理的主要任务(1)内存空间的分配与释放(2)内存空间的地址变换(3)内存空间的分区保护(4)内存空间的扩充2.存储管理的主要方法(1)单一连续存储管理(2)分区式存储管理(3)页式存储管理(4)段式存储管理(5)虚拟存储管理西安交通大学113.Windows的存储管理请求调页簇式的页式虚存管理Windows为每个进程分配的是虚拟内存空间全局内存局部内存在Windows操作系统下,存储器被保护起来,程序和用户无法直接访问西安交通大学123.2.3设备管理1.设备的分类按使用方式:独占设备和共享设备;按处理速度:慢速设备和快速设备;按数据组织和存取方式:字符设备和块设备;按通信方式:串行设备和并行设备;按应用范围:通用设备和专用设备;按隶属关系:系统设备和用户设备;按实体程序:真实设备和虚拟设备西安交通大学132.设备的输入/输出(Input/Output,I/O)控制方式1)程序直接控制方式。2)中断控制方式。中断中断服务程序3)DMA(directmemoryaccess,直接存储器访问)控制方式4)通道控制方式。西安交通大学143.设备管理的方式设备分配原则是根据设备本身的特性、用户要求和系统配置情况决定的。总的原则是:高效、安全、与物理设备无关。设备分配原则的因素1)I/O设备的固有属性2)I/O设备分配算3)设备分配中的安全性4)与设备无关性西安交通大学154.设备分配的步骤1)根据进程提出的物理设备名检索系统设备表SDT(SystemDeviceTable),从中找到该物理设备的设备控制表DCT(DeviceControlTable)。2)根据DCT中的状态信息,了解该设备是否忙。3)当设备分配给请求I/O的进程后,从该设备的设备控制表(DCT)中与该设备相连的控制器表指针一栏可知与此设备相连的控制器控制表(COCT,ControllerControlTable)。4)检查该控制器控制表中的状态信息来判断控制器是否忙。5)通过控制器控制表中的通道表指针,检查与此控制器相连的通道的状态。西安交通大学165.设备驱动程序设备驱动程序是I/O进程与设备控制器之间的通信程序,它接收上层软件发来的抽象I/O要求(如read或write命令)转换为具体要求后,发送给设备控制器,设置相关参数,启动设备并完成输入/输出。6.Windows的设备管理Windows操作系统通过设备驱动程序来完成设备的启动、操作、数据流向控制和设备的关闭工作。Windows采用分层驱动程序的思想,只有最底层的硬件设备驱动程序访问硬件设备,高层驱动程序都是进行高级I/O请求到低级I/O请求的转换工作,各层驱动程序间的I/O请求通过I/O管理器进行。西安交通大学173.2.4文件管理操作系统中与文件管理有关的程序和所管理的文件称为文件系统1.文件系统的功能2.文件结构逻辑结构物理结构流式文件记录式文件3.文件目录系统中的文件的文件名、文件的物理地址和文件属性等信息的表格。卷(逻辑盘)、文件夹、子文件夹、文件西安交通大学184.DOS(DiskOperatingSystem)的文件管理(1)DOS的文件名8.3格式,统配符。(2)DOS的文件目录树形目录结构,32字节(3)DOS文件的物理结构引导区(BOOT区)文件分配表区(FAT区)数据区(DATA区)FAT16西安交通大学19DOS磁盘数据结构

5.Windows的文件管理1)FAT32FAT32的结构和FAT16是一致的。FAT的每个登记项占4字节(32位),可以支持更大的分区,单个文件也可以更大。2)NTFSNTFS分区由引导区、主文件表(MFT)和文件区组成。引导区包括一个扇区的主引导记录(MasterBootRecord,MBR)和不超过15个扇区的Windows启动管理器。主文件表(MainFileTable,MFT)是保存文件信息的区域。NTFS所有的数据都存储在文件中,目录也是文件,甚至引导区也是一个文件。容错性、安全性、文件压缩、磁盘配额、可靠性西安交通大学203.2.5用户接口命令接口、程序接口、图形接口西安交通大学213.3基于Python的Windows操作系统应用程序设计3.3.1线程和进程1.线程程序设计threading模块(1)调用Thread类的构造函数创建线程Thread类构造函数__init__(self,group=None,target=None,name=None,args=(),kwargs=None,*,daemon=None)【例3-1】编写程序,创建三个线程,模拟三台机器,它们每隔1-3秒的时间生产1-5件产品。显示线程名作为“机器名”。西安交通大学22西安交通大学23(2)继承Thread类创建线程类继承Thread类,自定义一个线程类重写从父类继承得到的run()方法【例3-2】通过创建Thread的子类,创建线程,实现例3-1的功能。西安交通大学24西安交通大学25(3)守护线程所谓守护线程(或后台线程),就是为其他线程提供服务的线程,其特点是如果被服务的线程不结束,则守护线程不能结束,当被服务的线程结束时,守护线程结束。守护线程也是线程,可以象前面一样创建,在启动前将其daemon属性设置为True再启动【例3-3】在例3-1的基础上,创建一个守护线程,模拟一个监控机构,它每隔一个随机时间显示“Operatingnormally”,其他机器停止运行,监控也停止。西安交通大学26西安交通大学27(4)基于队列的线程同步队列同步是Python中线程同步的一种方法,线程产生的资源放入队列,消费的资源从队列中取出,队列机制保证队列满时和队列空时线程等待。【例3-4】编程模拟3个生产者,它们每个1-2秒生产一件产品;5个消费者,每个1-3秒消费一件产品。库房大小为10。库房满时不再生产,库房空时不能消费。西安交通大学28西安交通大学29西安交通大学302.进程程序设计multiprocessing模块(1)通过Process实例创建进程Process类的构造函数__init__(self,group=None,target=None,name=None,args=(),kwargs{})【例3-5】启动两个进程,模拟两台同时运行的机器。每台机器每隔1-5秒的随机时间随机生产1-3件产品。西安交通大学31西安交通大学32(2)通过Process的子类创建进程【例3-6】通过创建Process的子类创建例3-5中的进程。定义Process的派生类,重写run()方法西安交通大学33西安交通大学34(3)进程间通信multiprocessing提供的进程间通信方法之一是队列。通过multiProcessing中的Queue类创建队列对象,共享信息的进程可以在队列中插入和取出数据。【例3-7】使用进程的队列实现生产和消费模型的模拟。西安交通大学35西安交通大学36西安交通大学373.进程池和线程池所谓线程池(进程池)就是预先创建好若干个线程(进程),一般与CPU的核心数量相同,然后按需分配给需要处理的任务,任务结束并不关闭,而是将线程(进程)放回线程池(进程池)中等待任务。concurent.futures模块Executor类,使用其子类ThreadPoolExecutor和ProcessPoolExecutor创建线程池任务执行器和进程池任务执行器。其方法有submit(fn,*args,**kwargs)map(func,*iterables,timeout=None,chunksize=1)shutdown(wait=True)西安交通大学38Future类,表示执行的任务,其实例由Executor.submit()创建,主要方法:cancel()

running()done()result(timeout=None)add_done_callbaxck(fn)【例3-8】使用进程池寻找[10000000,10000200)之间的素数。西安交通大学39西安交通大学403.3.2内存管理和内存文件1.Python内存管理Python采用内存池机制。垃圾回收机制2.字符串、整数和浮点数与字节序列的转换字符串和字节序列的相互转换str.encode(encoding='utf-8')

bytes(str,encoding='utf-8')

s=b'str'bytestr.decode(encoding='utf-8')整数和字节序列的相互转换a.to_bytes(k,byteorder='big',signed='False')int.from_bytes(bytes,byteorder='big',signed='False')西安交通大学41浮点数和字节序列的相互转换内置模块struct中的pack和unpack函数,它们将数值数据转换为字节序列。struct.pack(fmt,v1,v2,…)struct.unpack(fmt,bugger)西安交通大学423.内存文件StringIO类用于文本流,BytesIO类用于二进制流,它们在io模块中。mf=io.StringIO()#返回内存文本文件对象bf=io.BytesIO()#返回内存二进制文件对象西安交通大学431)StringIO类。使用StringIO类创建文本内存文件使用read()、readline()、readlines()、getvalue()方法读取数据使用write()、writelines()写入数据。【例3-9】编写程序,创建内存文本文件,使用各种写入语句将下面的诗写入文件,使用各种读取语句读出并显示。东栏梨花苏轼〔宋代〕梨花淡白柳深青,柳絮飞时花满城。惆怅东栏一株雪,人生看得几清明。西安交通大学442)BytesIO类。创建二进制内存文件,常用方法:write(b)

read(size=-1)

readline(size=-1)

readlines(hint=-1)

getvalue()

seek()close()西安交通大学45【例3-10】编写程序,使用io.BytesIO类创建二进制内存文件,将整数、实数、字符串数据写入、读出并显示出来。西安交通大学463.内存映像文件Python使用mmap模块的mmap类实现内存映像的操作,其构造格式为:classmmap.mmap(fileno,length,tagname=None,access[,offset=0])使用read([n])、readline()、write()、seek()、find()、move()、close()等方法读若干字节,读一行,写若干字节,定位文件指针,查找、移动数据,关闭映像文件。【例3-11】使用内存映像文件对文件进行读写。编写程序,先使用常规方法写一个文本文件,内容如下:shaanxihistorymuseum陕西考古博物馆关闭后再使用open()打开,使用mmap.mmap建立内存映像文件,按行读取其中的内容,解码后显示。然后通过下标访问修改第1行每个单词的首字母大写,将第2行改为“陕西历史博物馆”。西安交通大学473.3.3文件管理相关的模块osos.pathglobshutilsubprocess西安交通大学483.3.4动态链接库和WindowsAPIctypes使用cdll和windll两个函数加载动态链接库。cdll用于cdecl调用约定,windll用于stdcall调用约定。函数的调用约定主要指参数的传递方式和清理栈的方式。由于动态链接库函数的参数类型与Python的参数类型不一致,所以调用动态链接库函数时通常需要将Python类型转换为函数需要的类型或创建函数需要的类型。西安交通大学49西安交通大学50

1)简单数据类型简单类型的参数,直接使用ctypes中的类型构造函数创建或初始化对象,使用对象的value属性为对象赋值或获得对象的值。西安交通大学51

2)数组通过ctypes简单类型的类型名乘以一个整数创建固定长度的数组。可以在创建数组时初始化。对字符数组,可以用属性value赋值和输出。西安交通大学523)指针ctypes.pointer(obj)函数创建ctypes对象的指针实例,它的参数是一个对象;POINTER(type)创建指针类型,它的参数是一个类型。西安交通大学534)创建内存区域ctypes.create_string_butter(init_or_size,size=None)创建一块可变的字符缓冲区,返回值是c_char类型的数组西安交通大学54

5)结构体结构体是由一组数据组合而成的整体,常表示现实中的一个对象的一组属性的值,如('张三','男',20,172)C语言的结构体的定义格式西安交通大学55实现ctypes类型的结构体,需要基于ctypes中的父类Structure写一个派生类,子类必须定义_fields_属性,,其值是两元组的列表,每个两元组包含一个名字域和一个类型域,它们是字段的名字和类型。西安交通大学562.调用C语言编写的动态链接库【例3-13】用C语言编写动态链接库文件,其中有4个函数,分别实现两个整数的和、交换两个整型变量的值、对整数数组排序、复制字符串等功能,其C语言的格式如下:intmyadd(inta,intb); voidmyswap(int*a,int*b); voidmysort(inta[],intn); char*mystrcpy(char*s1,char*s2); 将其编译为动态链接库,在Python中加载动态链接库,调用函数验证其功能。本例创建cdecl调用约定的库函数,使用cdll加载器的LoadLibrary(name)方法加载动态链接库西安交通大学57①编写动态链接库文件。②编译C语言程序,生成动态链接库文件。③编写Python程序。西安交通大学583.Windows下调用操作系统的API函数Windows操作系统的API一般以DLL的形式放在安装目录的System32文件夹中,扩展名名为.dll,例如kernel32.dllWindowsAPI使用stdcall调用约定,在Python中使用windll加载器的LoadLibrary()方法加载

【例3-14】编写Python程序,通过WindowsAPI的调用,(1)获取计算机的名称;(2)获取E盘的磁盘空间大小、空闲空间和用户可用空间大小等信息;(3)获取内存的大小和空闲内存的大小。西安交通大学59西安交通大学60西安交通大学613.3.5图形界面1.主窗口内置模块tkinter【例3-15】编写窗口程序,窗口大小300X200,在屏幕(100,10)位置显示该窗口,窗口标题“tkinterPythonGUI应用程序”。西安交通大学622.布局西安交通大学63(1)pack方式【例3-16】创建窗口,在窗口中显示四个按钮,按钮文本依次为青龙、白虎、朱雀、玄武。(2)grid布局【例3-17】编写GUI程序,在窗口中显示如下形式的按钮。西安交通大学64(3)place布局place布局直接设定组件的位置。其常用选项有:x,设定该控件的水平偏移位置,单位为像素。y,设定该控件的垂直偏移位置,单位为像素。西安交通大学653.事件处理(1)事件表示鼠标事件包括:<Button-1>表示按下鼠标左键。<Double-Button-1>表示双击鼠标左键。<ButtonRelease-n>,释放鼠标按钮。<Double-Button-n>,双击鼠标按钮。<Motion>,移动鼠标。<Bn-Motion>,按钮鼠标按钮,并移动鼠标。<Enter>,鼠标进入。<Leave>,鼠标离开。<MouseWheel>,鼠标滚轮滚动。西安交通大学66键盘事件包括:<KeyPress-key>或<Key-key>或<key>,特定键按下,其中key为某按键,如w、W等。<KeyRelease-key>特定键松开。窗口事件主要包括:<Configure>,改变窗口的位置和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论