当前位置:文档之家› 实验15事务与并发控制

实验15事务与并发控制

实验15事务与并发控制
实验15事务与并发控制

实验十五事务与并发控制

【实验目的与要求】

1.掌握数据库事务的概念

2.熟悉数据库的四个特性

3.熟练掌握数据库事务的实现方法

【实验容与步骤】

15.1.SQL Server数据库事务基础知识

1.事务的概念( Transaction )

所谓事务是用户定义的一个数据库操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。

关系数据库中,事务可以是一条SQL语句、一组SQL语句。

在SQL语言中,定义事务的语句有三条:

Begin Transaction 开始

Commit 结束

Rollback 回滚

2.事务开始:BEGIN TRANSACTION

标记一个显式本地事务的起始点。BEGIN TRANSACTION将 TRANCOUNT 加 1。

语法结构:

BEGIN TRAN [ SACTION ] [ transaction_name | tran_name_variable

[ WITH MARK [ 'description' ] ] ]

参数说明:

transaction_name:是给事务分配的名称。transaction_name 必须遵循标识符规则,但是不允许标识符多于 32 个字符。仅在嵌套的 https://www.doczj.com/doc/303316572.html,MIT 或 BEGIN...ROLLBACK 语句的最外语句对上使用事务名。

tran_name_variable:是用户定义的、含有有效事务名称的变量的名称。必须用 char、varchar、nchar 或 nvarchar 数据类型声明该变量。

WITH MARK ['description']:指定在日志中标记事务。Description 是描述该标记的字符串。

如果使用了 WITH MARK,则必须指定事务名。WITH MARK 允许将事务日志还原到命名标记。

4.事务提交:COMMIT TRANSACTION

标志一个成功的隐性事务或用户定义事务的结束。如果 TRANCOUNT 为 1,COMMIT TRANSACTION 使得自从事务开始以来所执行的所有数据修改成为数据库的永久部分,释放连

接占用的资源,并将TRANCOUNT 减少到0。如果TRANCOUNT 大于1,则COMMIT TRANSACTION 使 TRANCOUNT 按 1 递减。

语法结构:

COMMIT [ TRAN [ SACTION ] [ transaction_name | tran_name_variable ] ]

参数说明:

transaction_name:Microsoft SQL Serve 忽略该参数。transaction_name 指定由前面的 BEGIN TRANSACTION 指派的事务名称。transaction_name 必须遵循标识符的规则,但只使用事务名称的前 32 个字符。通过向程序员指明 COMMIT TRANSACTION 与哪些嵌套的BEGIN TRANSACTION 相关联,transaction_name 可作为帮助阅读的一种方法。

tran_name_variable:是用户定义的、含有有效事务名称的变量的名称。必须用 char、varchar、nchar 或 nvarchar 数据类型声明该变量。

5.事务回滚:ROLLBACK TRANSACTION

将显式事务或隐性事务回滚到事务的起点或事务的某个保存点。

语法结构:

ROLLBACK [ TRAN [ SACTION ]

[ transaction_name | tran_name_variable

| savepoint_name | savepoint_variable ] ]

参数说明:

transaction_name:是给 BEGIN TRANSACTION 上的事务指派的名称。transaction_name 必须符合标识符规则,但只使用事务名称的前 32 个字符。嵌套事务时,transaction_name 必须是来自最远的 BEGIN TRANSACTION 语句的名称。

tran_name_variable:是用户定义的、含有有效事务名称的变量的名称。必须用 char、varchar、nchar 或 nvarchar 数据类型声明该变量。

savepoint_name:是来自 SAVE TRANSACTION 语句的 savepoint_name。savepoint_name 必须符合标识符规则。当条件回滚只影响事务的一部分时使用 savepoint_name。

savepoint_variable:是用户定义的、含有有效保存点名称的变量的名称。必须用 char、varchar、nchar 或 nvarchar 数据类型声明该变量。

15.2.SQL Server数据库事务创建

1.事务的创建

(1)在查询分析器中执行以下语句,创建一个名为t_InsUpdate简单的事务,并使它正常提交。

Begin transaction t_InsUpdate --t_InsUpdate为事务名

Use CPXS

Insert into CP(产品编号,产品名称,价格,库存量)

Values('100021','宝马汽车',456780,39)

Update XSS

Set 负责人='飞'

Where 客户编号='000003'

Commit transaction t_InsUpdate --事务提交结束,t_InsUpdate为事务名测试:

执行语句“select * from xss; ”,看数据是否添加到表中?

请给出测试结果:

(2)在查询分析器中执行以下语句,创建一个简单的事务,并使它回滚BEGIN TRANSACTION

Use CPXS

select * from xss;

update xss

set 客户名称='理工学院'

where 客户编号='000002';

select * from xss;

Rollback;

测试:

select * from xss;

请给出测试结果:

思考:比较两条查询语句的结果差异,为什么会有这样的差异?

执行了事务后,rollback相当于取消了事务,事务没有生效。

2.事务的存储点:

事务的存储点可以使事务在发生回滚的情况下,存储点前的操作结果得以保存。执行以下语句,创建一个名为t_InsertCP,其中包含一个存储点。

Begin transaction t_InsertCP

--Use CPXS

Insert into CP(产品编号,产品名称,价格,库存量)

Values('100028','天山雪莲',456,57)

Save transaction t_InsertCP --存储点

Update CP

Set 产品名称='白药'

Where 产品编号='208729' --此为一个不存在的编号,目的是使插入操作出错if error!=0 --error为系统全局变量,错误号

rollback transaction t_InsertCP

else

commit transaction t_InsertCP

测试:

使用查询语句查询表CP中数据,观查查询结果,看存储点前的操作结果是否确实得以保存。

给出相应的结果:

2.事务的实验练习:

实验练习:写一个名为pt_CPXSB的存储过程,含一名为t_InserCPXSB的事务,用于实现向CPXSB表中插入一条数据时,检查“产品编号”字段是否包含有CP表中,“客户编号”是否包含于XSS表中,只要两者之一为否,撒销插入操作,否则,则提交数据。

给出相应的代码:

create proc pt_CPXSB

产品编号char(6),

客户编号char(6),

销售日期datetime,

数量int,

销售额float

as begin

begin transaction t_InserCPXSB

insert into CPXSB (产品编号,客户编号,销售日期,数量,销售额)

values (产品编号,客户编号,销售日期,数量,销售额)

if ((产品编号in (select 产品编号from CP))and (客户编号in (select

客户编号from XSS)))

begin

commit transaction t_InserCPXSB

print'插入一行数据成功'

select * from CPXSB

end

if (产品编号not in (select 产品编号from CP))

begin

print'插入数据中产品编号与CP表中产品编号不一致' rollback transaction t_InserCPXSB

end

if (客户编号not in (select 客户编号from XSS))

begin

print'插入数据中客户编号与XSS表中客户编号不一致' rollback transaction t_InserCPXSB

end end

给出测试结果:

15.3.锁与并发控制

15.3.0.SQL Server锁简介

1. 查看锁的信息

(1) 执行 EXEC SP_LOCK 报告有关锁的信息

(2)查询分析器中按Ctrl+2可以看到锁的信息

2. 如何锁定数据库对象

(1) 如何锁一个表的某一行 (示例)

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SELECT * FROM table ROWLOCK WHERE id = 1

(2) 锁定数据库的一个表(示例)

SELECT * FROM table WITH (HOLDLOCK)

3.软件开发中如何尽可能避免死锁

(1)使用事务时,尽量缩短事务的逻辑处理过程,及早提交或回滚事务;

(2)设置死锁超时参数为合理围,如:3分钟-10分种;超过时间,自动放弃本次操作,避免进程悬挂;

(3)优化程序,检查并避免死锁现象出现;

(4)对所有的脚本和SP都要仔细测试,在正式版本之前。

(5)所有的SP都要有错误处理(通过error)

(6)一般不要修改SQL SERVER事务的默认级别。不推荐强行加锁

15.3.1.排它锁

1.新建两个连接:

新建两个用户,并给相应的权限,然后各自登录到数据库中,分别打开查询窗口

2.在第一个连接中执行以下语句

begin tran

update XSS

set 客户名称='SM城市广场'

where 客户编号='000003'

waitfor delay '00:00:50' --等待50秒

commit tran

3.在第二个连接中执行以下语句

begin tran

select * from XSS

where 客户编号='000003'

commit tran

先执行以上两个语句中的第一个语句,后执行第二个语句,观查执行的结果(主要是执行时间的差异)。

练习:将以上两个连接的执行顺序调换,观查执行情况。

思考:为什么会有这样的结果?

其中一个用户对表XSS中000003客户编号加上排它锁,只允许该用户自己读取和修改,知道该用户释放,否则其他用户不能对其数据进行读取和修改。

注:若同时执行上述两个语句,则select查询必须等待update执行完毕才能执行即要等待50秒

15.3.2.共享锁

1.在第一个连接中执行以下语句

begin tran

select * from XSS with(holdlock) --holdlock人为加锁

where 客户编号='000003'

waitfor delay '00:00:50' --等待50秒

commit tran

2.在第二个连接中执行以下语句

begin tran

select 客户编号,地区

from XSS

where 客户名称='SM城市广场'

update XSS

set 客户名称='好又多超市'

where 客户编号='000003'

commit tran

给出执行情况:

练习:将以上两个连接的执行顺序调换,观查执行情况。

两个连接都要50s,结果相同。

思考:为什么会有这样的结果?

其中一个用户对表XSS中000003客户编号加上HOLDLOCK,导致其他用户只能对这一组数据读取,不能进行修改。

15.3.3.死锁

1.在第一个连接中执行以下语句

begin tran

update XSS

set 客户名称= '老虎城'

where 客户编号='000002'

waitfor delay '00:00:30'

update CP

set 库存量=50

where 产品编号='100005'

commit tran

2.在第二个连接中执行以下语句

begin tran

update CP

set 库存量=50

where 产品编号='100005'

waitfor delay '00:00:10'

update XSS

set 客户名称= '老虎城'

where客户编号='000002'

commit tran

给出执行情况:

练习:将以上两个连接的执行顺序调换,观查执行情况。

跟交换之前没差别。

思考:为什么会有这样的结果?

15.4.理解两段锁协议

通过对比各个阶段的exec sp_lock,观察写锁和读锁的释放时间。理解二段式锁(两段锁)的工作原理。

完成以下实验,思考为什么会有那样的实验结果。

(1)实验场景

新建两个连接:使用前面新建的两个用户,各自登录到数据库中,分别打开查询窗口,在两个查询分析窗口中分别执行以下操作。

连接1:中执行以下代码:

begin tran

select * from CP with (UPDLOCK) where 产品编号='100003'

连接2:中执行以下代码:

select * from CP where 产品编号='100003'

update CP set 库存量 = 库存量 + 100 where 产品编号='100003'

select * from CP where 产品编号='100003'

(2)查看阻塞情况

a. 通过查看第一个连接的锁定情况:exec sp_lock

请给出执行结果:

b. 打开文件夹:

2000版本“当前活动”-“锁/进程ID”

2005版本选择

给出观查结果:

15.5.事务应用案例

在数据库中创建两个表,账户信息表(bank)存放账户的信息,交易信息表(transInfo)

存放每次的交易信息。试用事务解决银行转账问题。如下图:

阅读以下程序段,领会其处理思想:

BEGIN TRANSACTION

/*--定义变量,用于累计事务执行过程中的错误--*/

DECLARE errorSum INT

SET errorSum=0 --初始化为0,即无错误

/*--转帐:三的少1000元,四的多1000元*/

UPDATE bank SET currentMoney=currentMoney-1000

WHERE customerName='三'

SET errorSum=errorSum+error

UPDATE bank SET currentMoney=currentMoney+1000

WHERE customerName='四'

SET errorSum=errorSum+error --累计是否有错误

IF errorSum<>0 --如果有错误

BEGIN

print '交易失败,回滚事务'

ROLLBACK TRANSACTION

END

ELSE

BEGIN

print '交易成功,提交事务,写入硬盘,永久的保存'

COMMIT TRANSACTION

END

GO

print '查看转账事务后的余额'

SELECT * FROM bank

GO

测试:

(1)测试转账1000时的转账情况

给出测试结果:

(2)测试转账800时的转账情况给出测试结果:

《8259中断控制器实验》的实验报告

实验六8259中断控制器实验 6.1 实验目的 (1) 学习中断控制器8259的工作原理。 (2) 掌握可编程控制器8259的应用编程方法。 6.2 实验设备 PC微机一台、TD-PIT+实验系统一套。 6.3 实验内容 1. 单中断应用实验 (1)编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示一个字符。 (2)编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示“Hello”,中断5次后退出。 2.扩展多中断源实验 利用实验平台上8259控制器对扩展系统总线上的中断线INTR进行扩展。编写程序对8259控制器的IR0和IR1中断请求进行处理。 6.4 实验原理 1. 8259控制器的介绍 中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU传送中断类型号。8259A的内部结构和引脚如图6-1所示。 8259A的命令共有7个,一类是初始化命令字,另一类是操作命令。8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1-OCW3分别写入初始化命令寄存器组和操作命令寄存器组。ICW1-ICW4各命令字格式如图6-2所示,

操作系统实验-进程控制

实验一、进程控制实验 1.1 实验目的 加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux 系统中进程创建与控制有关的系统调用的编程和调试技术。 1.2 实验说明 1)与进程创建、执行有关的系统调用说明进程可以通过系统调用fork()创建子进程并和其子进程并发执行.子进程初始的执行映像是父进程的一个复本.子进程可以通过exec()系统调用族装入一个新的执行程序。父进程可以使用wait()或waitpid()系统调用等待子进程的结束并负责收集和清理子进程的退出状态。 fork()系统调用语法: #include pid_t fork(void); fork 成功创建子进程后将返回子进程的进程号,不成功会返回-1. exec 系统调用有一组6 个函数,其中示例实验中引用了execve 系统调用语法: #include int execve(const char *path, const char *argv[], const char * envp[]); path 要装入 的新的执行文件的绝对路径名字符串. argv[] 要传递给新执行程序的完整的命令参数列表(可以为空). envp[] 要传递给新执行程序的完整的环境变量参数列表(可以为空).

Exec 执行成功后将用一个新的程序代替原进程,但进程号不变,它绝不会再返回到调用进程了。如果exec 调用失败,它会返回-1。 wait() 系统调用语法: #include #include pid_t wait(int *status); pid_t waitpid(pid_t pid,int *status,int option); status 用 于保留子进程的退出状态 pid 可以为以下可能值: -1 等待所有PGID 等于PID 的绝对值的子进程 1 等待所有子进程 0 等待所有PGID 等于调用进程的子进程 >0 等待PID 等于pid 的子进程option 规 定了调用waitpid 进程的行为: WNOHANG 没有子进程时立即返回 WUNTRACED 没有报告状态的进程时返回 wait 和waitpid 执行成功将返回终止的子进程的进程号,不成功返回-1。 getpid()系统调用语法: #include #include pid_t getpid(void); pid_t getppid(void); getpid 返回当前进程的进程号,getppid 返回当前进程父进程的进程号 2)与进程控制有关的系统调用说明可以通过信号向一个进程发送消息以控制进程的 行为。信号是由中断或异常事件引发的,如:键盘中断、定时器中断、非法内存引

实验二 中断控制电路实验

实验二中断控制电路实验 一、实验目的 1、学习单片机的中断控制原理。 2、编程中断控制器。 二、实验环境 硬件环境:奔3以上处理器,512MB以上内存空间 软件环境:windowsXP以上操作系统,emu8086编译环境,Proteus7、5sp3。 三.实验内容与完成情况 1、实验电路图 2.实验原理 8259中断控制器就是专为控制优先级中断设计的芯片。它将中断源优先级排队,辩别中断源以及提供中断矢量的电路集于一片中。因此无需附加任何电路,只需对8259进行编程,就可以管理8级中断,并选择优行模式与中断请求方式,即中断结构可以由用户编程来设定。同时,在不需要增加其它电路的情况下,通过多片8259的级联,能构成多达64级的矢量中断系统。 (1) 写初始化命令字 * 写初始化命令字ICW1(A0=0),以确定中断请求信号类型,清除中断屏蔽寄存器,中断优先级排队与确定系统用单片还就是多片。

* 写初始化命令字ICW2,以定义中断向量的高五位类型码。 * 写初始化命令字ICW3,以定义主片8259A中断请求线上IR0~IR7有无级联的8259A从片。 第i位=0,表明IRi引脚上无从片 第i位=1,表明IRi引脚上有从片 * 写初始化命令ICW4,用来定义8259A工作时用8085模式,还就是8088模式,以及中断服务寄存器复位方式等。

(2) 写控制命令字 * 写操作命令字0CW1,用来设置或清除对中断源的屏蔽。 第i位=0,对应的中断请求IRi开放 第i位=1,对应的中断请求IRi屏蔽 注: OCW1如不写,则在初始化命令写入后,OCW1为全开放状态。 * 操作命令字OCW2,设置优先级就是否进行循环、循环方式及中断结束方式。 注: 8259A复位时自动设置IR0优先权最高,IR7优先权最低。

实验15 事务与并发控制

实验十五事务与并发控制 【实验目的与要求】 1.掌握数据库事务的概念 2.熟悉数据库的四个特性 3.熟练掌握数据库事务的实现方法 【实验内容与步骤】 15.1.SQL Server数据库事务基础知识 1.事务的概念( Transaction ) 所谓事务是用户定义的一个数据库操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。 关系数据库中,事务可以是一条SQL语句、一组SQL语句。 在SQL语言中,定义事务的语句有三条: Begin Transaction 开始 Commit 结束 Rollback 回滚 2.事务开始:BEGIN TRANSACTION 标记一个显式本地事务的起始点。BEGIN TRANSACTION将@@TRANCOUNT 加1。 语法结构: BEGIN TRAN [ SACTION ] [ transaction_name | @tran_name_variable [ WITH MARK [ 'description' ] ] ] 参数说明: transaction_name:是给事务分配的名称。transaction_name 必须遵循标识符规则,但是不允许标识符多于32 个字符。仅在嵌套的https://www.doczj.com/doc/303316572.html,MIT 或BEGIN...ROLLBACK 语句的最外语句对上使用事务名。 @tran_name_variable:是用户定义的、含有有效事务名称的变量的名称。必须用char、varchar、nchar 或nvarchar 数据类型声明该变量。 WITH MARK ['description']:指定在日志中标记事务。Description 是描述该标记的字符串。 如果使用了WITH MARK,则必须指定事务名。WITH MARK 允许将事务日志还原到命名标记。 4.事务提交:COMMIT TRANSACTION 标志一个成功的隐性事务或用户定义事务的结束。如果@@TRANCOUNT 为1,COMMIT TRANSACTION 使得自从事务开始以来所执行的所有数据修改成为数据库的永

并发控制课后答案-简述并发控制

第八章并发控制 习题解答和解析 1. 1.在数据库中为什么要并发控制? 答:数据库是共享资源,通常有许多个事务同时在运行。当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。 2. 2.并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况? 答:并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读"脏"数据。 (1)丢失修改(Lost Update)两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了)T1提交的结果,导致T1的修改被丢失。 (2)不可重复读(Non -Repeatable Read)不可重复读是指事务T1读取数据后,事务T2 执行更新操作,使T1无法再现前一次读取结果。不可重复读包括三种情况:详见《概论》8.1(P266)。 (3)读"脏"数据(Dirty Read)读"脏"数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为"脏"数据,即不正确的数据。 避免不一致性的方法和技术就是并发控制。最常用的技术是封锁技术。也可以用其他技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制。 3. 3.什么是封锁? 答:封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。封锁是实现并发控制的一个非常重要的技术。 4. 4.基本的封锁类型有几种?试述它们的含义。 答:基本的封锁类型有两种:排它锁(Exclusive Locks, 简称 X 锁 )和共享锁(Share Locks,简称 S 锁)。 排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。 共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。 5.如何用封锁机制保证数据的一致性 ? 答:DBMS在对数据进行读、写操作之前首先对该数据执行封锁操作,例如下图中事务T1在对A进行修改之前先对A执行XLock(A),即对A加X锁。这样,当T2请求对A加X锁时就被拒绝,T2只能等待T1释放A上的锁后才能获得对A的X锁,这时它读到的A是T1更新后 的值,再按此新的A值进行运算。这样就不会丢失 T1的更新。

实验4 进程控制实验

实验四进程控制实验 一、实验目的 1、掌握进程的概念,明确进程和程序的区别。 2、认识和了解并发执行的实质。 3、分析进程争用资源的现象,学习解决进程互斥的方法。 二、实验内容 1、进程的创建 编写一段程序,使用系统调用fork( )创建两个子进程,在系统中有一个父进程和两个子进程活动。让每个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。(1分) <参考程序> # include void main() { int p1, p2; while((p1=fork())= = -1); if(p1= =0) putchar(‘b’); else { while((p2=fork())= =-1); if(p2= =0) putchar(‘c’); else putchar( ‘a’); } } 执行结果: 分析: 创建子进程p1,看当前是不是在子进程中,如果在p1中输出b,否则创建子进程p2,如果在子进程p2中输出c,否则在父进程中输出a。 2、修改第一题,在每个进程中显示当前进程识别码和父进程识别码。(2分) #include #include void main(){ int p1, p2;

while((p1= fork()) == -1); if(p1 == 0){ putchar('b'); printf("pid=%d\n",getpid()); printf("My parent’s pid=%d\n",getppid()); } else { while((p2 = fork()) ==-1); if(p2 == 0){ putchar('c'); printf("pid=%d\n",getpid()); printf("My parent’s pid=%d\n",getppid()); } else{ putchar('a'); printf("pid=%d\n",getpid()); printf("My parent’s pid=%d\n",getppid()); } } } 3、编写程序创建进程树如图1和图2所示,在每个进程中显示当前进程识别码和父进程识别码。(3分)(写其中一个即可) 图一: #include #include a 父进程 子进程 图1 进程树 b c d a d b c e 图2 进程树

微机接口实验报告-8259中断控制器应用实验

姓名 院专业班 年月日实验内容8259中断控制器实验指导老师 【实验目的】 (1)学习中断控制器8259的工作原理。 (2)掌握可编程控制器8259的应用编程方法。 【试验设备】 PC微机一台、TD-PIT+实验系统一套。 【实验内容】 (1) 编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示一个字符。 (2) 编写中断处理程序,利用PC机给实验系统分配的中断线,使用单次脉冲单元的KK1+按键模拟中断源,每次PC机响应中断请求,在显示器上显示“9”,中断显示6次后退出。 【实验原理】 1. 8259控制器的介绍 中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。它的管理功能包括:1)记录各级中断源请求,2)判别优先级,确定是否响应和响应哪一级中断,3)响应中断时,向CPU传送中断类型号。8259A的内部结构和引脚如图6-1所示。 8259A的命令共有7个,一类是初始化命令字,另一类是操作命令。8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1- OCW3分别写入初始化命令寄存器组和操作命令寄存器组。ICW1-ICW4各命令字格式如图6-2所示,OCW1-OCW3各命令字格式如图6-3所示,其中OCW1用于设置中断屏蔽操作字,OCW2用于设置优先级循环方式和中断结束方式的操作命令字,OCW3用于设置和撤销特殊屏蔽方式、设置中断查询方式以及设置对8259内部寄存器的读出命令。 图6-1 8259内部结构和引脚图

数据库实验报告:事务与并发控制

1.实验七:事务与并发控制 1.1.实验目的 1.掌握事务机制,学会创建事务。 2.理解事务并发操作所可能导致的数据不一致性问题,用实验展现四种数据不一致性 问题:丢失修改、读脏数据、不可重复读以及幻读现象。 3.理解锁机制,学会采用锁与事务隔离级别解决数据不一致的问题。 4.了解数据库的事务日志。 1.2.实验内容 假设学校允许学生将银行卡和校园卡进行绑定,在student数据库中有如下的基本表,其中校园卡编号cardid即为学生的学号: icbc_card(studcardid,icbcid,balance) //校园卡ID,工行卡ID,银行卡余额campus_card(studcardid,balance) //校园卡ID,校园卡余额 数据创建的代码: use student createtable campus_card ( studcardid Char(8), balance Decimal(10,2)) createtable icbc_card ( studcardid Char(8), icbcid Char(10), balance Decimal(10,2) )

insertinto campus_card values('20150031', 30) insertinto campus_card values('20150032', 50) insertinto campus_card values('20150033', 70) insertinto icbc_card values('20150031','2015003101', 1000) insertinto icbc_card values('20150032','2015003201', 1000) insertinto icbc_card values('20150033','2015003301', 1000) 针对以上数据库按照要求完成下列实验: 1.编写一个事务处理(begin tran)实现如下的操作:某学号为20150032的学生要从银 行卡中转账200元到校园卡中,若中间出现故障则进行rollback。(15分)settransactionisolationlevel repeatableread

第11章 并发控制(习题集)

第十一章并发控制(习题集) 二、选择题 1、为了防止一个用户的工作不适当地影响另一个用户,应该采取(D)。 A. 完整性控制 B. 访问控制 C. 安全性控制 D. 并发控制 2、解决并发操作带来的数据不一致问题普遍采用(A)技术。 A. 封锁 B. 存取控制 C. 恢复 D. 协商 3、下列不属于并发操作带来的问题是(C)。 A. 丢失修改 B. 不可重复读 C. 死锁 D. 脏读 4、DBMS普遍采用(C)方法来保证调度的正确性。 A. 索引 B. 授权 C. 封锁 D. 日志 5、如果事务T获得了数据项Q上的排他锁,则T对Q(C)。 A. 只能读不能写 B. 只能写不能读 C. 既可读又可写 D. 不能读也不能写 6、设事务T1和T2,对数据库中地数据A进行操作,可能有如下几种情况,请问哪一种不会发生冲突操作(D)。 A. T1正在写A,T2要读A B. T1正在写A,T2也要写A C. T1正在读A,T2要写A D. T1正在读A,T2也要读A 7、如果有两个事务,同时对数据库中同一数据进行操作,不会引起冲突的操作是(D)。 A. 一个是DELETE,一个是SELECT B. 一个是SELECT,一个是DELETE C. 两个都是UPDATE D. 两个都是SELECT 8、在数据库系统中,死锁属于(B)。 A. 系统故障 B. 事务故障 C. 介质故障 D. 程序故障 9、数据库中的封锁机制是( C )的主要方法。 A、完整性 B、安全性 C、并发控制 D、恢复 三、填空题 1、基本的封锁类型有两种:__排他锁__ 和_共享锁_ 。 2、并发操作可能会导致:丢失修改、不可重复读、读脏数据。 四、简答题

单片机实验二 定时器及中断控制实验

昆明理工大学信息工程与自动化学院学生实验报告 ( 2014 — 2015 学年第 2 学期) 课程名称:嵌入式技术开课实验室:信自楼402 2015年5月5日 年级、专业、班计科122 学号201210405204 姓名邹华宇成绩实验项目名称实验二定时器及中断控制实验指导教师江虹 教师评语该同学是否了解实验原理: A.了解□ B.基本了解□ C.不了解□ 该同学的实验能力: A.强□ B.中等□ C.差□ 该同学的实验是否达到要求: A.达到□ B.基本达到□ C.未达到□ 实验报告是否规范: A.规范□ B.基本规范□ C.不规范□ 实验过程是否详细记录: A.详细□ B.一般□ C.没有□ 教师签名: 年月日 一、实验目的 掌握定时器T0、T1的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。 二、实验原理 89C51单片机有五个中断源(89C52有六个),分别是外部中断请求0、外部中断请求1、定时器/计数器0溢出中断请求、定时器/计数器0溢出中断请求及串行口中断请求。每个中断源都对应一个中断请求位,它们设置在特殊功能寄存器TCON和SCON中。当中断源请求中断时,相应标志分别由TCON和SCON的相应位来锁寄。五个中断源有二个中断优先级,每个中断源可以编程为高优先级或低优先级中断,可以实现二级中断服务程序嵌套。在同一优先级别中,靠内部的查询逻辑来确定响应顺序。不同的中断源有不同的中断矢量地址。 中断的控制用四个特殊功能寄存器IE、IP、TCON (用六位)和SCON(用二位),分别用于控制中断的类型、中断的开/关和各种中断源的优先级别。 中断程序由中断控制程序(主程序)和中断服务程序两部分组成: 1)中断控制程序用于实现对中断的控制; 2)中断服务程序用于完成中断源所要求的中断处理的各种操作。 C51的中断函数必须通过interrupt m进行修饰。在C51程序设计中,当函数定义时用了interrupt m修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾

计算机组成原理中断实验报告

北京建筑大学 2015/2016 学年第二学期 课程设计 课程名称计算机组成原理综合实验 设计题目微程序控制器设计与实现 系别电信学院计算机系 班级计141 学生姓名艾尼瓦尔·阿布力米提 学号 完成日期二〇一六年七月八日星期五 成绩 指导教师 (签名) 计算机组成综合实验任务书

指令执行流程图; ?5、利用上端软件,把所编写的微程序控制器内容写入实验台中控制器中。 ?6、利用单拍测试控制器与编程的要求是否一致。如果有错误重新修改后再写入控制器中。 7、编写一段测试程序,测试控制器运行是否正确。 实验目的 1.融合贯通计算机组成原理课程,加深对计算机系统各模块的工作原理及相互联系(寄存器堆、运算器、存储器、控制台、微程序控制器)。 2.理解并掌握微程序控制器的设计方法和实现原理,具备初步的独立设计能力;3.掌握较复杂微程序控制器的设计、调试等基本技能;提高综合运用所学理论知识独立分析和解决问题的能力。 实验电路 1. 微指令格式与微程序控制器电路 2.微程序控制器组成 仍然使用前面的CPU组成与机器指令执行实验的电路图,但本次实验加入中断系统。这是一个简单的中断系统模型,只支持单级中断、单个中断请求,有中断屏蔽功能,旨在说明最基本的原理。

中断屏蔽控制逻辑分别集成在2片GAL22V10(TIMER1 和TIMER2)中。其ABEL语言表达式如下: INTR1 := INTR; INTR1.CLK = CLK1; IE := CLR & INTS # CLR & IE & !INTC; IE.CLK= MF; INTQ = IE & INTR1; 其中,CLK1是TIMER1产生的时钟信号,它主要是作为W1—W4的时钟脉冲,这里作为INTR1的时钟信号,INTE的时钟信号是晶振产生的MF。INTS微指令位是INTS机器指令执行过程中从控制存储器读出的,INTC微指令位是INTC机器指令执行过程中从控制存储器读出的。INTE是中断允许标志,控制台有一个指示灯IE显示其状态,它为1时,允许中断,为0 时,禁止中断。当INTS = 1时,在下一个MF的上升沿IE变1,当INTC = 1时,在下一个MF的上升沿IE变0。CLR信号实际是控制台产生的复位信号CLR#。当CLR = 0时,在下一个CLK1的上升沿IE变0。当 CLR=1 且INTS = 0 且 INTC = 0时,IE保持不变。 INTR是外部中断源,接控制台按钮INTR。按一次INTR按钮,产生一个中断请求正脉冲INTR。INTR1是INTR经时钟CLK1同步后产生的,目的是保持INTR1与实验台的时序信号同步。INTR脉冲信号的上升沿代表有外部中断请求到达中断控制器。INTQ是中断屏蔽控制逻辑传递给CPU的中断信号,接到微程序控制器上。当收到INTR脉冲信号时,若中断允许位INTE=0,则中断被屏蔽,INTQ仍然为0;若INTE =1,则INTQ =1。

事务调度与并发控制

四级数据库第八章-事务调度与并发控制8.1 并发控制概述 在第七章中己经讲到,事务是并发控制的基本单位,保证事务ACID特性是事务处理的重要任务,而事务ACID特性可能遭到破坏的原因之一是多个事务对数据库的并发操作造成的。为了保证事务的隔离性更一般,为了保证数据库的一致性,DBMS需要对并发操作进行正确调度。这些就是数据库管理系统中并发控制机制的责任。 下面先来看一个例子,说明并发操作带来的数据的不一致性问题。 考虑飞机订票系统中的一个活动序列: ①甲售票点(甲事务)读出某航班的机票余额A,设A=16; ②乙售票点(乙事务)读出同一航班的机票余额A,也为16; ③甲售票点卖出一张机票,修改余额A A-l,所以A为15,把A写回数据库; ④乙售票点也卖出一张机票,修改余额A A-l,所以A为15,把A写回数据库。结果明明卖出两张机票,数据库中机票余额只减少1。 这种情况称为数据库的不一致性。这种不一致性是由并发操作引起的。在并发操作情况下,对甲、乙两个事务的操作序列的调度是随机的。若按上面的调度序列执行,甲事务的修改就被丢失。这是由于第④步中乙事务修改A并写回后覆盖了甲事务的修改。 仔细分析并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读“脏”数据,如图8.1所示。 1.丢失修改(Lost Update) 两个事务T1和T2。读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失,如图8.1(a)所示。上面飞机订票例子就属此类。

图8.1 2.不可重复读(Non-Repeatable Read) 不可重复读是指事务T1读取数据后,重复T2执行更新操作,使T1无法再现前一次读 取结果。具体地讲,不可重复读包括三种情况: (1)事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值。例如在图8.1(b)中,T1读取B=100进行运算,T2读取同一数据B对其进行修改后将B=200写回数据库。T1为了对读取值校对重读B,B己为200,与第1次读取值不一致。 (2)事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘地消失了。 (3)事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。 后两种不可重复读有时也称为幻影(Phantom Row)现象。

第十一章练习题及答案

第十一章数据库并发控制 一、选择题 1.为了防止一个用户的工作不适当地影响另一个用户,应该采取(D )。 A. 完整性控制 B. 访问控制 C. 安全性控制 D. 并发控制 2. 解决并发操作带来的数据不一致问题普遍采用(A)技术。 A. 封锁 B. 存取控制 C. 恢复 D. 协商 3.下列不属于并发操作带来的问题是(C)。 A. 丢失修改 B. 不可重复读 C. 死锁 D. 脏读 4.DBMS普遍采用(C)方法来保证调度的正确性。 A. 索引 B. 授权 C. 封锁 D. 日志 5.事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放,这是(A)。 A. 一级封锁协议 B. 二级封锁协议 C. 三级封锁协议 D. 零级封锁协议 6.如果事务T获得了数据项Q上的排他锁,则T对Q(C )。 A. 只能读不能写 B. 只能写不能读 C. 既可读又可写 D. 不能读也不能写7.设事务T1和T2,对数据库中地数据A进行操作,可能有如下几种情况,请问哪一种不会发生冲突操作(D )。 A. T1正在写A,T2要读A B. T1正在写A,T2也要写A C. T1正在读A,T2要写A D. T1正在读A,T2也要读A 8.如果有两个事务,同时对数据库中同一数据进行操作,不会引起冲突的操作是(D )。 A. 一个是DELETE,一个是SELECT B. 一个是SELECT,一个是DELETE C. 两个都是UPDATE D. 两个都是SELECT 9.在数据库系统中,死锁属于(B)。 A. 系统故障 B. 事务故障 C. 介质故障 D. 程序故障 选择题答案: (1) D (2) A (3) C (4) C (5) A (6) C (7) D (8) D (9) B 二、简答题 1. 并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况? 答:并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读“脏”数据。(1)丢失修改(Lost Update) 两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了(覆盖了)T1提交的结果,导致T1的修改被丢失。 (2)不可重复读(Non-Repeatable Read) 不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。 (3)读“脏”数据(Dirty Read) 读“脏”数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。 避免不一致性的方法和技术就是并发控制。最常用的并发控制技术是封锁技术。也可以

微机原理实验---中断控制实验

深圳大学实验报告 课程名称:微机计算机设计 实验项目名称:8259 中断控制实验 学院:信息工程学院 专业:电子信息工程 指导教师: 报告人:学号:2009100000班级:<1>班实验时间:2011. 05.19 实验报告提交时间:2011. 05. 26 教务处制

一、实验目的 1. 掌握8259 中断控制器的工作原理。 2. 学习8259 的应用编程方法。 3. 掌握8259 级联方式的使用方法。 二、实验要求 1、8259 单中断实验,由单次脉冲输出与主片8259 的IR7 相连可以实现每按动一次单次脉冲,产生一次外部中断,在显示屏上输出一个字符“7”。 2、8259 级联实验,由KK1+连接到主片8259 的IR7 上,KK2+连接到从片8259 的IR1 上,可实现当按一次KK1+时,显示屏上显示字符“M7”,按一次KK2+时,显示字符“S1”。 三、实验设备 PC 机一台,TD-PITE 实验装置或TD-PITC 实验装置一套。 四、实验原理 1、在Intel 386EX 芯片中集成有中断控制单元(ICU),该单元包含有两个级联中断控制器,一个为主控制器,一个为从控制器。该中断控制单元就功能而言与工业上标准的82C59A 是一致的,操作方法也相同。从片的INT 连接到主片的IR2 信号上构成两片8259 的级联。在TD-PITE 实验系统中,将主控制器的IR6、IR7 以及从控制器的IR1 开放出来供实验使用,主片8259 的IR4 供系统串口使用。8259 的内部连接及外部管脚引出如图: 2、在对8259 进行编程时,首先必须进行初始化。一般先使用CLI 指令将所有的可屏蔽中断禁止,然后写入初始化命令字。8259 有一个状态机控制对寄存器的访问,不正确的初始化顺序会造成异常初始化。在初始化主片8259 时,写入初

实验二 中断控制电路实验

实验二中断控制电路实验 一. 实验目的 1.学习单片机的中断控制原理。 2.编程中断控制器。 二. 实验环境 硬件环境:奔3以上处理器,512MB以上内存空间 软件环境:windowsXP以上操作系统,emu8086编译环境,Proteus7.5sp3。 三.实验内容与完成情况 1.实验电路图 2.实验原理 8259中断控制器是专为控制优先级中断设计的芯片。它将中断源优先级排队,辩别中断源以及提供中断矢量的电路集于一片中。因此无需附加任何电路,只需对8259进行编程,就可以管理8级中断,并选择优行模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需要增加其它电路的情况下,通过多片8259的级联,能构成多达64级的矢量中断系统。 (1) 写初始化命令字 * 写初始化命令字ICW1(A0=0),以确定中断请求信号类型,清除中断屏蔽寄存器,中断优先级排队和确定系统用单片还是多片。

* 写初始化命令字ICW2,以定义中断向量的高五位类型码。 * 写初始化命令字ICW3,以定义主片8259A中断请求线上IR0~IR7有无级联的8259A从片。 第i位=0,表明IRi引脚上无从片 第i位=1,表明IRi引脚上有从片 * 写初始化命令ICW4,用来定义8259A工作时用8085模式,还是8088模式,以及中断服务寄存器复位方式等。

(2) 写控制命令字 * 写操作命令字0CW1,用来设置或清除对中断源的屏蔽。 第i位=0,对应的中断请求IRi开放 第i位=1,对应的中断请求IRi屏蔽 注:OCW1如不写,则在初始化命令写入后,OCW1为全开放状态。 * 操作命令字OCW2,设置优先级是否进行循环、循环方式及中断结束方式。 注:8259A复位时自动设置IR0优先权最高,IR7优先权最低。

基于封锁的事务并发控制概述

基于封锁的事务并发控制概述 发表时间:2010-05-14T10:46:24.013Z 来源:《计算机光盘软件与应用》2010年第4期供稿作者:卢成浪,徐湖鹏 [导读] 叙述了关系型数据库管理系统中的事务管理和基于锁的事务并发控制方法。 卢成浪,徐湖鹏 (温州大学瓯江学院,温州 325035) 摘要:叙述了关系型数据库管理系统中的事务管理和基于锁的事务并发控制方法。详细介绍了事务的串行化调度方法中的锁技术和锁 协议,并深入讨论了锁的管理、死锁处理、幻影问题和其它加锁过程中可能出现的一些问题。 关键词:数据库管理系统;事务;并发控制;封锁 中图分类号:TP311.131 文献标识码:A 文章编号:1007-9599 (2010) 04-0000-03 Lock-Based Transaction Concurrency Control Overview Lu Chenglang,Xu Hupeng (Wenzhou University,Oujiang College,Wenzhou 325035,China) Abstract:An overview on the management of lock- based concurrency control of transactions is presented in this paper.The locking protocols and locking techniques of the locking are discussed in depth. Keywords:Database management systems;Transaction;Concurrency control;Lock 一、引言 事务是用户定义的一组数据库操作序列。事务的执行结果将使数据库从一个一致性状态转变到另一个一致性状态。为了提高吞吐量, 系统中常常是多个事务并发执行。这会产生多个事务同时存取同一数据的情况,从而破坏数据库的一致性。所以数据库管理系统 (Database Management System,DBMS)必须提供并发控制机制,使得并发的事务在冲突的时候被串行化执行。这种调度称为可串行化 调度。其中基于封锁的并发控制机制是一种被广泛应用于商业DBMS中的并发控制机制。 二、事务的特性和并发的数据不一致性 事务具有ACID特性:原子性(Atomicity),一致性(Consistency),隔离性(Isolation)和持续性(Durability)。原子性指:事 务包含的所有操作要么全部被执行,要么都不被执行;一致性指:事务的执行结果必须使数据库从一个一致性状态变到另一个一致性状 态;隔离性指:在事务被提交以前,其操作结果对于其他事务不可见;持续性指:一旦事务成功提交,其对数据库中数据的改变是永久 的。事务是并发控制的基本单位,保证事务的ACID特性是事务处理的重要任务。然而,事务的并发执行可能会破坏事务的ACID特性,而导 致数据的不一致性: (一)Write-Write冲突,丢失更新。它是由于事务之间的写冲突造成的。两个事务T1和T2同时读入同一数据并修改,T2的提交破坏 了T1的提交结果,导致T1的修改丢失。 (二)Read-Write冲突,也称不一致读。不一致读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。它 包括三种情况:1.T1读取某一数据后, T2对其做了修改,当T1再次读取该数据时,得到与前一次不同的值;2.T1按一定的条件从数据库 中读取了某些记录后,T2删除其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘的消失了;3.T1按一定的条件从数据库 中读取了某些记录后,T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。后两种情况也称幻影现象。 (三)Write-Read冲突,也称读脏数据。读脏数据指事务T1修改某数据,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已 修改过的数据恢复原值,T2读到的数据就与数据中的数据不一致,则称T2读到的数据就为脏数据。 三、基于封锁的事务并发控制机制 (一)锁的类型 封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象例如表,记录等操作之前,先向系统发出请求,对 其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它之前,其他事务不能更新该数据对象。下面介绍DBMS涉及的锁: 1.互斥锁(Exclusive Lock):用于写操作,又称写锁或者排他锁,记做X锁。若事务T对数据对象A加上X锁,则只允许T读写A,其他 事务都不能对A加任何锁,直到T释放A上的锁。 2.共享锁(Shared Lock):用于读操作,又称读锁,记做S锁。若事务T对数据对象A加上S锁,则T可读A但不能写A,其他事务只能对 A加S锁,而不能加X锁,直到T释放锁。 3.更新锁(Update Lock):用于更新操作。等价于先加共享锁,在真正执行更新操作时,将共享锁升级为互斥锁。大部分DMBS 都 不使用这种锁。 4.增量锁(Increment Lock):用于增量操作,如果一个对象被上了增量锁,除增量操作以外任何读写操作都是被禁止的。即增量锁 之间不排斥。因同时对某一对象的数值进行加一或者减一操作时,其结果与操作先后顺序是无关的,可以交换。这种锁使用并不广泛。 5.意向锁(Intention Lock):它是因为引入多粒度对象而产生的,又可 细分为:意向共享锁,意向排他锁和共享意向排他锁。 在DBMS 中被广泛使用的是共享锁,互斥锁和意向锁。为了保证写操作的互 斥性,不同事务对同一数据对象加锁时需要进行冲突检测。检测可以借助锁的相 容矩阵来判断,如图1(a)所示。从中可以发现5种锁的强度偏序关系,如图1 (b)所示。 (二)加锁管理和锁转换 DBMS中处理事务加锁事宜的部分被称为锁管理器。锁管理器维护着一个锁 表,这是一个以数据对象标志为码的哈希表。DBMS也在事务表中维护着每个事务的描述信息项,该记录中包含一个指向事务拥有的锁列表 的指针。在请求锁之前要检查这个列表,以确定不会对同一个锁请求两次。 加锁表中的每一项针对某个数据对象(可以是一页,一条记录等等),它包括下面的信息:拥有数据对象锁的事务数目,锁的属性 (共享锁、互斥锁等)和一个指向加锁请求队列的指针。

DSP实验定时器中断实验精

实验四定时器中断实验 一:实验目的 1.熟悉定时器初始化的步骤; 2.熟悉定时器控制寄存器(TCR)的含义和使用; 3.熟悉定时器的原理和应用。 二:实验内容 本实验要求编写一个简单的定时器中断程序,设置一定的周期控制与XF引脚相连的LCD指示灯。当定时器中断产生时可以观察到LCD周期性闪烁。 三:实验原理 1.定时器 SRESET .C54xx 系列的 DSP 都具有一个或两个预定标的片内定时器,这种定时器是一个倒数定时器,它可以被特定的状态位实现停止、重启动、重设置或禁止。定时器在复位后就处于运行状态,为了降低功耗可以禁止定时器工作。应用中可以用定时器来产生周期性的 CPU 中断或脉冲输出。定时器的功能方框图如图 9.1 所示,其中有一个主计数器( TIM )和一个预定标计数器( PSC )。 TIM 用于重装载周期寄存器 PRD 的值, PSC 用于重装载周期寄存器 TDDR 的值。 图5.1中有一个信号,是在器件复位时,DSP向外围电路(包括定时器)发送的一个信号,此信号将在定时器上产生以下效果:寄存器TIM和PRD装载最大值(0FFFFH);TCR的所有位清0;结果是分频值为0,定时器启动,TCR的FREE 和SOFT为0。 图5.1定时器的功能方框图 定时器实际上是有20bit的周期寄存器。它对CLKOUT信号计数,先将PSC(TCR 中的D6~D9位)减1,直至PSC为0,然后把TDDR(TCR中的低4位)重新装载入PSC,同时将TIM减1,直到TIM减为0。这时CPU发出TINT中断,同时在TOUT引脚输出一个脉冲信号,脉冲宽度与CLKOUT一致,然后将PRD重新装入TIM,重复 TSS 下去直到系统或定时器复位。

数据库并发控制

数据库是一个共享资源,可以提供多个用户使用。这些用户程序可以一个一个地串行执行,每个时刻只有一个用户程序运行,执行对数据库的存取,其他用户程序必须等到这个用户程序结束以后方能对数据库存取。但是如果一个用户程序涉及大量数据的输入/输出交换,则数据库系统的大部分时间处于闲置状态。因此,为了充分利用数据库资源,发挥数据库共享资源的特点,应该允许多个用户并行地存取数据库。但这样就会产生多个用户程序并发存取同一数据的情况,若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性,所以数据库管理系统必须提供并发控制机制。并发控制机制的好坏是衡量一个数据库管理系统性能的重要标志之一。 DM用封锁机制来解决并发问题。它可以保证任何时候都可以有多个正在运行的用户程序,但是所有用户程序都在彼此完全隔离的环境中运行。 一、并发控制的预备知识 (一) 并发控制概述 并发控制是以事务(transaction)为单位进行的。 1. 并发控制的单位――事务 事务是数据库的逻辑工作单位,它是用户定义的一组操作序列。一个事务可以是一组SQL 语句、一条SQL语句或整个程序。 事务的开始和结束都可以由用户显示的控制,如果用户没有显式地定义事务,则由数据库系统按缺省规定自动划分事务。 事务应该具有4种属性:原子性、一致性、隔离性和持久性。 (1)原子性 事务的原子性保证事务包含的一组更新操作是原子不可分的,也就是说这些操作是一个整体,对数据库而言全做或者全不做,不能部分的完成。这一性质即使在系统崩溃之后仍能得到保证,在系统崩溃之后将进行数据库恢复,用来恢复和撤销系统崩溃处于活动状态的事务对数据库的影响,从而保证事务的原子性。系统对磁盘上的任何实际数据的修改之前都会将修改操作信息本身的信息记录到磁盘上。当发生崩溃时,系统能根据这些操作记录当时该事

相关主题
文本预览
相关文档 最新文档