CN114741117A - 一种跨平台的程序指令重排的验证方法 - Google Patents

一种跨平台的程序指令重排的验证方法 Download PDF

Info

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
Application number
CN202210222209.7A
Other languages
English (en)
Other versions
CN114741117B (zh
Inventor
束长栋
廖球
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Stock Exchange Technology Co ltd
Original Assignee
Shanghai Stock Exchange Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Stock Exchange Technology Co ltd filed Critical Shanghai Stock Exchange Technology Co ltd
Priority to CN202210222209.7A priority Critical patent/CN114741117B/zh
Publication of CN114741117A publication Critical patent/CN114741117A/zh
Application granted granted Critical
Publication of CN114741117B publication Critical patent/CN114741117B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering 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值,供读进程进行数据正确性判断。
CN202210222209.7A 2022-03-09 2022-03-09 一种跨平台的程序指令重排的验证方法 Active CN114741117B (zh)

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)

* Cited by examiner, † Cited by third party
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 富士通株式会社 情報処理プログラム、情報処理装置および情報処理方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
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