CN114741117A - 一种跨平台的程序指令重排的验证方法 - Google Patents
一种跨平台的程序指令重排的验证方法 Download PDFInfo
- Publication number
- CN114741117A CN114741117A CN202210222209.7A CN202210222209A CN114741117A CN 114741117 A CN114741117 A CN 114741117A CN 202210222209 A CN202210222209 A CN 202210222209A CN 114741117 A CN114741117 A CN 114741117A
- Authority
- CN
- China
- Prior art keywords
- data
- read
- program
- reading
- memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 101
- 230000008707 rearrangement Effects 0.000 title claims abstract description 22
- 238000012795 verification Methods 0.000 title claims abstract description 18
- 238000007689 inspection Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 8
- 230000002159 abnormal effect Effects 0.000 description 3
- 230000007547 defect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开一种跨平台的程序指令重排的验证方法,该方法将两个应用进程对同一块共享内存读写并发操作,运行时写进程在某地址写数据时,读进程在该地址上追赶到写进程进行读操作,具体方法包括写进程程序和读进程程序,所述写进程程序主流程中先进行Data变量赋值操作,再进行Flag变量的赋值操作;所述读进程程序主流程中先判断Flag变量是否就绪,再进行Data变量的读操作,检查Data值和上一次读取值preData之差,差值不为1则表示指令重排;本发明公开的一种跨平台的程序指令重排的验证方法,提出了内存中的Data和Flag同时设置为相同的数值的方式,简化了指令重排的结果验证,支持多种程序设计语言,通过共享内存使用,便于进程之间的数据同步。
Description
技术领域
本发明涉及计算机技术领域,具体来说是一种跨平台的程序指令重排的验证方法。
背景技术
现代CPU一般采用流水线来执行指令,一般情况下一条指令的执行被分成:取指、译码、访存、执行、写回等若干个阶段,多条指令可以同时存在于流水线中,同时被执行,指令流水线是并行的,多条指令可以同时处于同一阶段,只要CPU的处理部件未被占满即可;因此,指令乱序就有可能产生了,乱序产生时代码执行的顺序就发生了颠倒,这一现象称之为指令重排。比如,程序存在两条先后顺序的赋值语句,后一条赋值语句就有可能先于前一条语句完成。
发明内容
本发明的目的在于解决现有技术的不足,提供一种跨平台的程序指令重排的验证方法。
为了实现上述目的,设计一种跨平台的程序指令重排的验证方法,该方法将两个应用进程对同一块共享内存读写并发操作,运行时写进程在某地址写数据时,读进程在该地址上追赶到写进程进行读操作,具体方法如下:
写进程程序,主流程中执行两个步骤,第一进行Data变量赋值操作,第二进行Flag变量的赋值操作;
读进程程序,主流程中执行两个步骤,第一判断Flag变量是否就绪,第二进行Data变量的读操作,检查Data值和上一次读取值之差,差值不为1则表示指令重排。
本发明还包括如下优选的技术方案。
优选地,一种跨平台的程序指令重排的验证方法,还包括所述应用进程中的变量Data和Flag在内存实现中组成程序操作的最小单元,以便读写进程的使用,因此程序中使用结构体将两个变量组合成逻辑上的整体。
优选地,一种跨平台的程序指令重排的验证方法,还包括所述共享内存是一块大小固定且连续的共享内容,形同一块连续的数组。
优选地,一种跨平台的程序指令重排的验证方法,还包括所述的共享内存为首尾相接的环形结构。
一种跨平台的程序指令重排的验证方法,所述验证方法,具体如下:
a.写进程负责内存数据的生成,写进程使用写指针操作共享内存,从第一位置开始,将Data和Flag赋一个相同的64位的long long类型值,使用相同的数值用于读进程进行数据判断,赋值完成后,写指针后移一位,同时,下一个位置的赋值递增一;
b.读进程负责内存数据的读取,同时,通过对Flag和Data的数据检查,完成对程序运行状态的验证,判断进程运行过程中程序是否发生了指令重排,读进程使用读指针操作共享内存,在读进程中设置一个变量preData,初始化0,该值记录每次读进程获取到的内存位置中的Data值,供读进程进行数据正确性判断。
本发明同现有技术相比,其优点在于:
1.不限于特定的程序运行环境,支持多种程序设计语言;
2.通过共享内存使用,便于进程之间的数据同步;
3.提出了内存中的Data和Flag同时设置为相同的数值的方式,简化了指令重排的结果验证。
附图说明
图1 为内存数据结构体图。
图2为共享内存结构图。
图3为正常的读取过程图。
图4为异常的读取过程图。
具体实施方式
参见图1,图1为内存数据结构体图,应用进程中的变量Data和Flag在内存实现中组成程序操作的最小单元,以便读写进程的使用,因此程序中使用结构体将两个变量组合成逻辑上的整体。
参见图2,图2为共享内存结构图,基于图1的内存数据结构体,创建一块大小固定且连续的共享内存,形同一块连续的数据,本方法中设置的创建大小为500万个结构体,约76MB内存空间,其中,当读写指针进行内存操作达到最后一个位置500万时,读写指针操作的下一位置为1,因此在逻辑上共享内存为首尾相接的环形结构。
针对上述方法的验证方法如下:
(1)内存数据的生成
写进程负责内存数据的生成,写进程使用写指针操作共享内存,从位置1开始,将Data和Flag赋一个相同的64位的long long类型值,使用相同的数值以便于读进程进行数据判断,赋值完成后,写指针后移一位,同时下一个位置的赋值递增1,;例如,位置1的Data和Flag值为1,则位置2的Data和Flag的值为2,依次类推。
当写指针写完位置500万时,下一个位置为位置1,Data和Flag的值为5000001,同时覆盖原位置1的Data和Flag数据,即写指针在循环写数据时,写入的数值是持续递增的,环形共享内存中Data和Flag的数值变化如表1所示:
表1 内存中的数值
位置1的值 | 位置2的值 | 位置N的值 | 位置5000000的值 | |
第1轮 | 1 | 2 | N | 5000000 |
第2轮 | 1+5000000 | 2+5000000 | N+5000000 | 5000000+5000000 |
第M轮 | 1+5000000*(M-1) | 2+5000000*(M-1) | N+5000000*(M-1) | 5000000+5000000*(M-1) |
(2)内存数据的读取
读进程负责读取内存中的数据,同时,通过对Flag和Data的数据检查,完成对程序运行状态的验证,判断进程运行过程中程序是否发生了指令重排,读进程使用读指针操作共享内存,在读进程中设置一个变量为preData,初始化为0,该值记录每次读进程获取到的内存位置中的Data值,供读进程进行数据正确性判断。
参见图3,图3为正常的读取过程图,在进程模型的操作流程中,写进程在完成Data变量的赋值之后,再完成Flag变量的赋值,读进程在判断Flag变量就绪后,再读取Data变量,当读指针当前读取的Data和PreData的差值为1,即Data-preData=1时,表示读取的数值正确,指令执行正常。
否则参见图4,图4为异常的读取过程图,表示读取数据异常,发生了指令重排,同时错误预期内读取的Data和preData的差值-4999999,即当前读指针获取Data的是上一轮的数据值,而Flag为当前这一轮的值,在异常的数据读取过程中,读进程在进行数据读取的那一时刻,读指针和写指针指向内存中的同一结构体,并且同时对内存进行操作。
为了验证上述方法,进行如下实施例验证。
实施例
实施环境:
操作系统:OpenVMS V8.4-2L1;
CPU:HP Integrity BL860ci6;
程序开发语言:C语言。
实施过程:
编写读写进程程序代码,其中读进程进行共享内存的创建。
验证时,先将实施环境中的共享内存清空,关闭其他的应用进程,读进程优先启动运行,启动完成后再启动运行写进程。
在实验环境执行读写进程验证程序,查看实验结果,读进程如发生异常读取,则在终端屏显上打印相关日志,如进程执行时在一定的时间内无异常读取的屏显日志,则认为读取数据正常,实验结果如表2所示:
表2测试数据
preData | Data | Data-preData | |
输出1 | 67684675 | 62684676 | -4999999 |
输出2 | 67726242 | 62726243 | -4999999 |
输出3 | 67814691 | 62814692 | -4999999 |
输出4 | 69512610 | 64512611 | -4999999 |
输出5 | 71581459 | 66581460 | -4999999 |
…… |
以上所述,仅为此发明的具体实施方式,但本发明的保护范围不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案和新型的构思加于等同替换或改变,都应涵盖在本发明的保护范围之内。
Claims (5)
1.一种跨平台的程序指令重排的验证方法,其特征在于将两个应用进程对同一块共享内存读写并发操作,运行时写进程在某地址写数据时,读进程在该地址上追赶到写进程进行读操作;具体方法如下:
写进程程序,主流程中执行两个步骤:
先进行Data变量赋值操作,后进行Flag变量的赋值操作;
读进程程序,主流程中执行两个步骤:
先判断Flag变量是否就绪;就绪后再进行Data变量的读操作,然后检查Data值和上一次读取值preData之差,差值不为1则表示指令重排。
2.如权利要求1所述的一种跨平台的程序指令重排的验证方法,其特征在于所述应用进程中的变量Data和Flag在内存实现中组成程序操作的最小单元,以便读写进程的使用,因此程序中使用结构体将两个变量组合成逻辑上的整体。
3.如权利要求1所述的一种跨平台的程序指令重排的验证方法,其特征在于所述共享内存是一块大小固定且连续的共享内存,形同一块连续的数组。
4.如权利要求2所述的一种跨平台的程序指令重排的验证方法,其特征在于所述的共享内存为首尾相接的环形结构。
5.如权利要求1-4任一所述的一种跨平台的程序指令重排的验证方法,其特征在于所述验证方法,具体如下:
a.写进程负责内存数据的生成,写进程使用写指针操作共享内存,从第一位置开始,将Data和Flag赋一个相同的64位的long long类型值,使用相同的数值用于读进程进行数据判断,赋值完成后,写指针后移一位,同时,下一个位置的赋值递增一;
b.读进程负责内存数据的读取,同时,通过对Flag和Data的数据检查,完成对程序运行状态的验证,判断进程运行过程中CPU操作是否发生了指令重排,读进程使用读指针操作共享内存,在读进程中设置一个变量为preData,初始化为0,该值记录每次读进程获取到的内存位置中的Data值,供读进程进行数据正确性判断。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210222209.7A CN114741117B (zh) | 2022-03-09 | 2022-03-09 | 一种跨平台的程序指令重排的验证方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210222209.7A CN114741117B (zh) | 2022-03-09 | 2022-03-09 | 一种跨平台的程序指令重排的验证方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114741117A true CN114741117A (zh) | 2022-07-12 |
CN114741117B CN114741117B (zh) | 2024-08-09 |
Family
ID=82274918
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210222209.7A Active CN114741117B (zh) | 2022-03-09 | 2022-03-09 | 一种跨平台的程序指令重排的验证方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114741117B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5559975A (en) * | 1994-06-01 | 1996-09-24 | Advanced Micro Devices, Inc. | Program counter update mechanism |
CN103645942A (zh) * | 2013-12-12 | 2014-03-19 | 北京奇虎科技有限公司 | 基于消息队列的共享内存写入及读取方法和系统 |
CN113299326A (zh) * | 2021-05-17 | 2021-08-24 | 珠海市一微半导体有限公司 | 基于fifo的数据先进后出型存储电路及读写方法 |
JP2021131613A (ja) * | 2020-02-18 | 2021-09-09 | 富士通株式会社 | 情報処理プログラム、情報処理装置および情報処理方法 |
-
2022
- 2022-03-09 CN CN202210222209.7A patent/CN114741117B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5559975A (en) * | 1994-06-01 | 1996-09-24 | Advanced Micro Devices, Inc. | Program counter update mechanism |
CN103645942A (zh) * | 2013-12-12 | 2014-03-19 | 北京奇虎科技有限公司 | 基于消息队列的共享内存写入及读取方法和系统 |
JP2021131613A (ja) * | 2020-02-18 | 2021-09-09 | 富士通株式会社 | 情報処理プログラム、情報処理装置および情報処理方法 |
CN113299326A (zh) * | 2021-05-17 | 2021-08-24 | 珠海市一微半导体有限公司 | 基于fifo的数据先进后出型存储电路及读写方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114741117B (zh) | 2024-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8261130B2 (en) | Program code trace signature | |
KR900002604B1 (ko) | 제어기억장치를 갖는 정보처리장치내의 에러회복 장치 및 방법. | |
US20050268195A1 (en) | Apparatus and method for improving emulation speed of high-level languages in on-chip emulation systems | |
CN113377586B (zh) | 一种服务器自动化检测方法、装置及存储介质 | |
CN114741117B (zh) | 一种跨平台的程序指令重排的验证方法 | |
US12072789B2 (en) | Resumable instruction generation | |
JP2020523693A (ja) | Jitコンパイラを使用しかつ選択されたターゲットコードブロックの変換をバイパスするターゲットシステムのエミュレーション | |
JP2001356971A (ja) | マルチプロセッサメモリをテストするシステム及び方法 | |
CN103119564A (zh) | 用于检查处理器的主存储器的方法和装置 | |
US20010052114A1 (en) | Data processing apparatus | |
CN111695314A (zh) | 一种多核芯片仿真测试方法及装置 | |
KR20210080398A (ko) | 메모리 내장 자체 테스트 컨트롤러를 이용한 판독 전용 메모리 테스트 | |
JP2944321B2 (ja) | 論理評価システム | |
JPH0954694A (ja) | パイプラインプロセッサおよびその処理方法 | |
JPS59195751A (ja) | 情報処理装置の診断方式 | |
JPS6159696A (ja) | 制御メモリ修復方式 | |
JP2012128752A (ja) | ソース変換方法 | |
JP2000222243A (ja) | デバッグ装置及びデバッグ方法 | |
JPS59183443A (ja) | デバツグ装置 | |
CN113297093A (zh) | 银行软件的测试方法及装置 | |
JPS62127948A (ja) | プログラムデバッグ処理方式 | |
JPS6225340A (ja) | 検査装置 | |
JPS59218555A (ja) | マイクロプログラム制御装置 | |
JPS62224833A (ja) | デ−タ形式の適否検査方式 | |
JPH09189744A (ja) | Icテスタユニット診断方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |