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

5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

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

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

1

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

Page 2: 5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

sc_event

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

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

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

2

sc_event event_name1 [, event_name2, …];

Page 3: 5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

이벤트 구동형 시뮬레이터

� 그림 7-2

3

Page 4: 5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

� 그림 7-3

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

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

4

Page 5: 5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

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

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

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

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

5

Page 6: 5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

SC_THREAD

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

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

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

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

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

6

Page 7: 5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

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

� 스레드 프로세서에서 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; // 재개의원인이시간경과에의한것으로판단

Page 8: 5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

동시성과 시간에 대한 고찰

� 리스트 7-5

8

Page 9: 5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

� 그림 7-4

9

Page 10: 5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

� 그림 7-5

10

Page 11: 5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

� 그림 7-6

11

Page 12: 5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

이벤트 유발: .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 13: 5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

SC_METHOD

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

� wait() 사용할 수 없다.

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

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

13

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

Page 14: 5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

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

Page 15: 5. 동시실행 - gnu.ac.krrts.gnu.ac.kr/class/2008fall/embed_system/ch5-1p.pdf스레드프로세스는다시호출될수없으므로, 일반적으로스레드프로 세스내에한번이상의wait

프로세스의 정적 감응

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

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

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

15

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