리눅스는 어떻게 구현되는가?
본 자료는 2페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
해당 자료는 2페이지 까지만 미리보기를 제공합니다.
2페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

■ 리눅스란 무엇인가?
■ GNU는 무엇인가?
■ 리눅스의 특징
■ 명령해석기 : 쉘(shell)
■ Linux Kernel은 무엇인가?
■ 프로세스의 모습은?
■ 여러개의 프로세스는?
■ Thread는 어떻게 구현되어 있는가?
■ 프로세스 상태변화의 특이점?
■ Fork()의 문제점 및 해결방법은?
■ Zombie는 어떤 상태인가?
■ Scheduler의 모습은?
■ 동적 우선순위는 어떻게 부여되는가?
■ 동적 Timeslice는 어떻게 계산되는가?
■ 스케줄링(scheduling)은 어떻게 구현되는가?
■ 어떻게 sychronization를 보장하는가?
■ Deadlocks 발생과 해결책

본문내용

실행가능 한 태스크이며 스케줄러는 이를 태스크에서
실행함
■ 어떻게 sychronization를 보장하는가?
● 스핀락(Spinlock) : Multiprocessor 동기화용
code)
spinlock_t mr_lock = SPIN_LOCK_UNLOCKED;
spin_lock(&mr_lock);
/*critical section*/
spin_unlock(&mr_lock);
○ 역할 : Spinlock임 오직 하나만 critical section에 들어갈 수 있도록 함
○ 원리 : 만약 어떤 쓰레드가 이미 잠겨진 스핀록을 다시 잠그려 시도한다면 그 쓰레드는 busy waiting됨
lock을 잠글 수 있을 때까지 기다림. 만약 록이 열려있으면 록을 잠근 다음 진행게 됨
=> 결국 멀티프로세싱 동기화 가능
○ 단점 : 이미 잠겨진 스핀록이 다른 쓰레드들을 스핀하도록 하는 것은 프로세서 시간을 소모하므로 스핀록으로
오랫동안 계속 잡고 있는 경우 CPU 소모됨
○ 쓰임 : 스핀록은 가볍고 소유자가 하나인 록으로서 짧은 기간동안만 소유될수 있는 곳에 쓰여야함
● Semaphore : uniprocessor 또는 multiprocessor 동기화용
code)
struct semaphore
{
int count;
struct wait_queue *wait;
};
wait_queue
{
struct task_struct *task;
struct wait_queue *next;
};
○ 역할 : mutex로 호배제도 가능하며 semaphore counter로 다중배제 가능
○ 원리 : 쓰레드를 휴면(sleep)시킨 다음 록을 잠글 수 있을 때 깨어나게 하는 것함. 이렇게 하면 프로세서가 놓여지게 되고 다른 코드를 실행할 수 있게 해줌
○ 단점 : 블록(block)된 쓰레드를 넘나드는 두번의 context switch가 발생함
※ context switch는 순수한 오버헤드임
○ 쓰임 : 락을 오랫동안 소유해야 하는 경우(critical section에 오랫동안 머물러야 하는 경우)
■ Deadlocks 발생과 해결책
● 발생
○ 프로그램 하나에 세마포어를 두개 이상 쓸 경우, 서로 다른 두 제어 경로에서 서로 상대방이 점유하고 있는 세마포어가 해제되길 기다리며 동작을 멈출 경우에 발생함
● 해결책
○ 주소순서에 따라 세마포어에 대한 요청을 수행
(가장 낮은 주소에 위치한 세마포어 자료구조에 세마포어 요청을 먼저 수행)
  • 가격1,300
  • 페이지수6페이지
  • 등록일2008.04.10
  • 저작시기2008.4
  • 파일형식한글(hwp)
  • 자료번호#460506
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니