PicoKernel을 수정하여 스케줄링 알고리즘을 우선순위 대신 FCFS가 되도록 구현
본 자료는 2페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
해당 자료는 2페이지 까지만 미리보기를 제공합니다.
2페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

없음

본문내용

번호 변수
int userMain(int arg)
{
mboxid = mboxCreate(); // 메일박스를 생성한다.
threadCreate(producer,20,mboxid); // producer함수를 실행하는 스레드 생성
threadCreate(consumer,20,mboxid); // consumer함수를 실행하는 스레드 생성,
우선순위 20, mboxid는 함수의 매개변수
}
int producer(int mboxid)
{
m = 98215001; // 메시지 내용
n = getpid(); // getpid()를 통해 현재 실행중인 스레드의 번호를 알아냄
mbox2Send(mboxid,m,n); // 메시지를 해당 mboxid로 지정된 메일박스에 저장
}
int consumer(int mboxid)
{
int msgp, sendthnum; // 전송된 메시지를 저장할 변수
mbox2Receive(mboxid,&msgp,&sendthnum); // 해당 메일박스로부터 저장된 메시지 수신
printf("송신 쓰레드 번호 => %d\n\n", sendthnum); // 송신 스레드 번호 출력
printf("메시지 내용 => %d\n", msgp); // 메시지 내용 출력
}
□ 실행결과
□ 토의 및 건의사항
메시지를 전송하고자 하는 프로세스가 지정된 메일박스에 넣어두면 메시지를 수신하고자 하는 프로세스는 이 메일 박스에서 꺼내가는 형식을 취한다. 메일 박스는 보통 저장할 수 있는 용량이 제한되는데 이 과정 에서 발생하는 동기화 문제는 세마포를 사용하여 메일 박스의 버퍼가 비거나 가득 찰때까지 기다리도록 하 고 뮤텍스 락과 언락을 이용하여 메일박스에 기록중이거나 읽기 작업중인 경우 메일박스상에 어떠한 작업 을 못하도록 해주고 있다. 커널에 메일박스 기능을 구현하는 방법은 메시지들을 저장할 수 있는 일정한 영 역을 커널 내부에 마련해 두고 송신고 수신을 위한 시스템 콜 함수들에서는 메시지를 공유 버퍼에 기록하 는 작업 및 읽어내는 작업을 위 프로그램의 producer와 consumer의 처리 방식과 동일한 방법으로 처리된다 . 기존의 PicoKernel에서는 메시지내용만을 메일박스로 전송하였으나 메일박스의 엔트리 구조에서 메일박 스의 메시지버퍼의 크기를 이차원 배열로 설정해줌으로써 2가지 즉 메시지 내용과 송신 스레드의 번호를 모두 전송 가능토록 하였다. 송신 스레드의 번호는 getpid()를 통하여 id를 알아내어 이를 mbox2Send()의 매개변수로 넘겨주어 mbox2Receive()에서 받아서 출력하였다. 스레드 두 개를 생성하여 하나는 메일박스로 메시지들을 전송하는 역할을 하는 함수를 또 다른 하나는 메일박스에 전송된 메시지를 읽어오는 작업을 수 행하는 함수로 구현하였다. 스레드의 우선순위는 동일하게 설정하였으므로 mbox2Send()가 먼저 생성된 스 레드의 함수이므로 먼저 실행된다. mboxid나 m,n과 같은 변수들은 전역적으로 선언해줌으로써 producer() 와 consumer() 모두에서 사용 가능하다.

키워드

  • 가격2,500
  • 페이지수7페이지
  • 등록일2006.05.02
  • 저작시기2004.2
  • 파일형식한글(hwp)
  • 자료번호#347021
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니