4
5. 동시실행 동시실행 동시실행 동시실행 (7. 동시실행: 프로세스와 이벤트) 1 (7. 동시실행: 프로세스와 이벤트) sc_event 이벤트 어느 순간 어떤 변화의 발생 사실을 나태는 것 값을 갖지 않음 시간적 지속성이 없음 sc_event sc_event SystemC에서 이벤트 표현하기 위한 클래스 이벤트 객체 sc_event는 값을 저장힉 위한 것이 아니라, 단지 이벤트를 일으키거나 감응을 지정할 때 사용 2 sc_event event_name1 [, event_name2, …]; 이벤트 구동형 시뮬레이터 그림 7-2 3 그림 7-3 초기화 과정 이후 평가 단계가 반복적으로 수행 준비열에서 프로세스를 하나씩 무작위로 호출해서 수행 프로세스튼 wait()가 호출되거나 return 명령이 실행되면 대기상태에 놓인다. 준비열의 프로세스가 모두 실행되면 시뮬레이터는 영점 지연, 시간 지연, 종료 중의 하나의 행동을 수행 4

이벤트 구동형 시뮬레이터 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-4p.pdf · 스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 이벤트 구동형 시뮬레이터 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-4p.pdf · 스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로

5. 동시실행동시실행동시실행동시실행

(7장. 동시실행: 프로세스와이벤트)

1

(7장. 동시실행: 프로세스와이벤트)

sc_event

� 이벤트� 어느 순간 어떤 변화의 발생 사실을 나태는 것� 값을 갖지 않음� 시간적 지속성이 없음

� sc_event� sc_event� SystemC에서 이벤트 표현하기 위한 클래스

� 이벤트 객체 sc_event는 값을 저장힉 위한 것이 아니라, 단지이벤트를 일으키거나 감응을 지정할 때 사용

2

sc_event event_name1 [, event_name2, …];

이벤트 구동형 시뮬레이터

� 그림 7-2

3

� 그림 7-3

� 초기화 과정 이후 평가 단계가 반복적으로 수행� 준비열에서 프로세스를 하나씩 무작위로 호출해서 수행� 프로세스튼 wait()가 호출되거나 return 명령이 실행되면 대기상태에놓인다.

� 준비열의 프로세스가 모두 실행되면 시뮬레이터는 영점 지연, 시간지연, 종료 중의 하나의 행동을 수행

4

Page 2: 이벤트 구동형 시뮬레이터 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-4p.pdf · 스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로

� 평가 단계가 완료되면 시뮬레이션 스케쥴러는 다음과 같은 세가지의 행동을 취한다.� 프로세스 또는 이벤트가 SC_ZERO_TIME으로 영점 지연되어 대기 중인 경우

� wait(SC_ZERO_TIME)을 호출해 영점 지연된 스레드 프로세스는 대기열에서 준비열로 옮겨진다.� 이벤트열에 event.notify(SC_ZERO_TIME)으로 공지된 영점 지연 이벤트가 있으면, 대기 중인 대기열의 프로세스도 준비열로 옮겨진다.� 영전 지연 처리후 준비열에 프로세스가 놓여 있으면 시뮬레이션 시간의� 영전 지연 처리후 준비열에 프로세스가 놓여 있으면 시뮬레이션 시간의진행 없이 새로운 평가과정 반복한다.

� 프로세스나 이벤트가 시간 지연 후 처리되도록 대기 중인 경우� wait (t1)를 호출해 지연된 프로세스와 event.notify(t1)으로 공지된지연 이벤트에 감응된 프로세스가 대기열에서 준비열로 옮겨진다.� 시간 지연 처리후 준비열에 프로세스가 있으면 평가 과정 반복한다.

� 지연된 프로세스나 이벤트가 더 이상 없는 경우� 준비열에 프로세스가 존재하지 않으므로 새로운 평가 단계를 시작할 수없다. � 지연된 이벤트가 예약되어 있지 않으면 시뮬레이션을 계속할 필요가 없다. � 시뮬레이터는 sc_main으로 되돌려지고 시뮬레이션은 종료된다.

5

SC_THREAD

� 스레드 프로세스는 시뮬레이터에 의해 한번만 호출된다.

� 스레드가 일단 실행되면 스스로 실행권을 시뮬레이터에게 넘기기 전까지 독점한다.

� SystemC에서 프로세스에서 시뮬레이터로 실행권을 넘기는 방법는 방법� (1) return 명령

� 스레드 프로세스는 다시 호출될 수 없으므로, 일반적으로 스레드 프로세스 내에 한번 이상의 wait 호출이 포함된 while(true) {…} 형태로구현된다.

� (2) wait 함수 호출� 스레드 프로세스는 일지정지한다.

6

스레드 프로세스의 동적 감응

� 스레드 프로세서에서 wait() 함수 사용 구문� wait (time); // 지정된 시간 경과 후 재개� wait (event); // 지정된 이벤트 발생하면 재개� wait (event1 | eventn …); // 지정된 이벤트 중 하나라도발생하면 재개

� wait (event1 & eventn …); // 지정된 모든 이벤트가 발생하면� wait (event1 & eventn …); // 지정된 모든 이벤트가 발생하면재개

� wait (timeout, event); // 지정된 시간 경과 또는 이벤트가발생하면 재개

� wait (); // 정적 감응된 이벤트가 발생하면 재개� 재개된 즉시 time_out() 함수 이용해서 재개 원인 판단

7

sc_event ac_event, bus_error_event;

wait (t_MAX_DELAY, ack_event | bus_error_event);

if (time_out()) break; // 재개의원인이시간경과에의한것으로판단

동시성과 시간에 대한 고찰

� 리스트 7-5

8

Page 3: 이벤트 구동형 시뮬레이터 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-4p.pdf · 스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로

� 그림 7-4

9

� 그림 7-5

10

� 그림 7-6

11

이벤트 유발: .notify()

� notify() 구문 형식// 객체지향적형식의이벤트공지방법event_name.notify (); // 즉시공지event_name.notify (SC_ZERO_TIME); // 지연공지event_name.notify (time); // 시간공지// 함수호출형식의이벤트공지방법notify (event_name); // 즉시공지

� 즉시 공지 : 대기 중인 프로세스를 즉시 준비열로 옮긴다.

� 지연 공지 : 현재 진행 중인 평가 단계 후 실행� 시간 공지 : 시간을 지정해 이벤트 예약

� 지연 공지를 포함해서 시간 공지가 중복될 경우: 현재에서 가장 가깝게 예정된 이벤트만을 유효한 것으로 간주

� .cancel() 메소드를 이용해 취소시킬 수 있다.

12

notify (event_name); // 즉시공지notify (event_name, SC_ZERO_TIME); // 지연공지notify (event_name, time); // 시간지연공지

Page 4: 이벤트 구동형 시뮬레이터 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-4p.pdf · 스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로

SC_METHOD

� SC_METHOD� SC_THREAD에 비해 기능이 단순한 메소드 프로세스� 프로세스 중간에 일시정지와 재개 같은 스레딩이 허용 되지 않는다.

� wait() 사용할 수 없다.

� 일단 호출되면 return 명령까지 실행된다.

시뮬레이션 커널은 정적이나 동적 이벤트 감응에 의해 메소드 프� 시뮬레이션 커널은 정적이나 동적 이벤트 감응에 의해 메소드 프로세스를 반복적으로 호출 할 수 있다.

13

SC_METHOD (process_name); // 생성자내에등록

SC_METHOD의 동적 감응

� next_trigger() 메소드를 이용해서 동적 감응 지정

� next_trigger() 구문� next_trigger (time);

� next_trigger (event);

� next_trigger (event1 | event2 … );

next_trigger (event1 & event2 … );� next_trigger (event1 & event2 … );

� next_trigger (time, event);

� next_trigger ();

� next_trigger()가 호출되어도 나머지 내용이 모두 실행� 다음번 프로세스의 호출시 이벤트 감응이나 시간 지연을 위해일시적으로 정적 감응을 재지정

� SC_METHOD 프로세스는 반드시 감응이 설정되어야 한다.

14

프로세스의 정적 감응

� 정적 감응� 시뮬레이션이 시작되기 전에 구성자가 실행될 때 설정� 설정된 정적 감응 리스트는 변경 불가능� 실행 중 동적 감응으로 설정을 변경할 수 있다.

� 동적 감음에 대한 처리가 완료되면 정적 감응은 복원된다.

� 정적 감응 설정 방법� 정적 감응 설정 방법� sensitive() 메소드 호출� 스트리밍 연산자 operator <<를 사용

15

sensitive << event [<< event … ] ; // 스트리밍형식sensitive (event [, event …] ); // 함수호출형식