Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
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
� 평가 단계가 완료되면 시뮬레이션 스케쥴러는 다음과 같은 세가지의 행동을 취한다.� 프로세스 또는 이벤트가 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
� 그림 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); // 시간지연공지
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 …] ); // 함수호출형식