본문 바로가기
카테고리 없음

[심화문제] PART 05 프로세스 동기화

by upself 2022. 12. 5.
728x90
쉽게 배우는 운영체제

쉽게 배우는 운영체제

조성호

명쾌한 비유와 사례로 쉽게 배우는 운영체제의 구조와 원리 컴퓨터 관련 학과 학생을 대상으로 운영체제의 구조와 원리를 설명한 책이다. 주요 개념은 일상생활의 사례를 통해 쉽게 이해하고, 개념 간의 관계는 다양한 그림과 표로 명확히 정리할 수 있다. 20년 가까이 강의해온 저자의 내공이 고스란히 녹아 있어 복잡하고...

 

 

 

[심화문제]

 

1. 프로세스 간 통신을 통신 방향에 따라 분류하여 설명하시오.
  • 양방향 통신
    • 일반적 통신, 소켓
  • 반양방향 통신
    • 무전기
  • 단방향 통신
    • 전역 변수, 파일, 파이

 

 

2. 대기가 있는 통신과 대기가 없는 통신의 의미를 설명하고 적절한 예를 제시하시오.
  • 대기가 있는 통신
    • 의미 : 동기화를 지원하는 통신 방식이다. 데이터를 받는 쪽은 데이터가 도착할 때까지 자동으로 대기 상태에 머물러 있다.
    • 적절한 예 : 파이프, 소켓
  • 대기가 없는 통신
    • 의미 : 동기화를 지원하지 않는 통신 방식이다. 데이터를 받는 쪽은 바쁜 대기를 사용하여 데이터가 도착했는지 여부를 직접 확인한다.
    • 적절한 예 : 전역 변수, 파일

 

 

3. 실생활의 예를 들어 임계구역 문제를 설명하시오.

믹서기는 공유가 불가능한 자원으로 주방의 임계구역이라고 할 수 있다.

 

 

4. 다음 코드의 문제점을 설명하시오.
다음 코드의 문제점을 설명하시오.

프로세스 P1이 while(lock==true); 문을 실행하기 전에 프로세스 P2가 while(lock==true); 문을 실행하면 둘 다 임계구역에 진입하면서 상호 배제 조건을 보장하지 못하게 된다.

 

 

5. 다음 코드의 문제점을 설명하시오.
다음 코드의 문제점을 설명하시오.

프로세스의 우선순에 상관없이 번갈아가며 임계구역이 진입하며 프로세스 P2가 프로세스 P1의 진행을 방해하는 구조이다. 프로세스의 진행이 다른 프로세스로 인해 방해받는 현상을 경직된 동기화라고 하며 진행의 융통성 조건을 보장하지 못한다.

 

 

6. 파일을 이용하여 Test라는 문자를 주고받는 코드를 작성하시오.
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

void main()
{
	int pid, fd;
    char buf[5];
    
    fd=open("com.txt", O_RDWR);	/*init*/
    pid=fork();
    
    if(pid<0 || fd<0) exit(-1);
    
    else if(pid==0){
    	write(fd, "Test", 5);
        close(fd);
        exit(0);
    }else{
    	lseek(fd, 0, SEEK_SET);
        read(fd, buf, 5);
        printf("%s", buf);
        close(fd);
        exit(0);
    }
}

 

 

 

 

좋은 성과를 얻으려면 한 걸음 한 걸음이 힘차고 충실하지 않으면 안 된다.

-단테
반응형