🎁[속보] 인프런 내 깜짝 선물 출현 중🎁

[인프런워밍업클럽] 2주차 발자국 미션

[인프런워밍업클럽] 2주차 발자국 미션

섹션4 프로세스 동기화

유닛 1 프로세스간 통신

프로세스는 독립적으로 실행 or 다른 프로세스와 데이터를 주고 받으며 통신

통신은 한 컴퓨터 내에서 실행되고 있는 다른 프로세스와 할 수도 있고, 네트워크로 연결된 다른 컴퓨터에 있는 프로세서와 할 수 도 있음

종류

  1. 한 컴퓨터 내에서 통신

    • 파일과 파이프

      • 파일

        • 통신을 하려는 프로세스들이 하나의 파일을 이용해 읽고 쓰는 방법

      • 파이프

        • 운영체제가 생성한 파이프를 이용해 데이터를 읽고 쓰는 방법

    • 스레드

      • 코드, 데이터, 힙 영역을 공유하고 스택만 각자 자기의 것을 가지고 있음

      • 데이터 영역에 있는 전역변수나 힙을 이용하면 통신이 가능

    • 네트워크

      • 운영체제가 제공하는 소켓통신이나 다른 컴퓨터에 있는 함수를 호출하는 RPC(원격 프로시저 호출)를 이용해 통신

유닛2 공유자원과 임계구역

공유자원

  • 프로세스 간 통신을 할 때 공동으로 이용하는 변수, 파일

문제

  • 공유 자원은 여러 프로세스가 공유하고 있기 때문에 각 프로세스의 접근 순서에 따라 결과 달라짐

  • 컨텍스트 스위칭으로 시분할 처리를 하기 때문에 어떤 프로세스가 먼저 실행되고 어떤 프로세스가 나중에 실행되는지 예측하기 힘듦

  • 연상결과를 예측하기 힘들고 여기에 발생한 문제를 동기화 문제라고 함

    • 예) 게임을 예시로 듦

      • 캐릭터 총 체력 100, 현재 체력 20

      • 지금은 적에게 공격을 받고 있고 플레이어는 죽지 않기 위해 물약을 먹음

      • 이때 물약을 먹는 코드와 적에게 공격받는 코드에서 발생할 수 있는 동기화 문제를 살펴봄

      • 두 가지 코드가 동시에 실행됐는데 CPU 스케줄러에 의해 공격받는 코드가 먼저 실행됐다고 가정

      • 두번째

임계구역

  • 여러 프로세스가 동시에 사용하면 안되는 영역

경쟁조건

  • 공유자원을 서로 사용하기 위해 경쟁하는 것

임계구역 문제 해결 방법

  • 상호배제의 메커니즘이 필요함

    • 요구사항

      1. 주어진 시간에 항상 하나의 프로세스만 임계구역에 접근 가능

      2. 동시에 여러개의 요청이 있더라도 하나의 프로세스만 진입하도록 허용

      3. 임계구역에 들어간 프로세스는 최대한 빠르게 나와야함 → 다른 프로세스들이 오래 기다리기 떄문에

유닛3 세마포어

프로세스 : 프린트를 사용하려는 직원, 프린터는 여러 프로세스들이 같이 쓰고 있는 공유자원

대기큐 : 프린트를 사용하기 위해 프로세스가 기다리는 공간

운영체제 : 열쇠관리자

세마포어 : 열쇠관리자가 들고 있는 열쇠, 정수형 변수

사용법

세마포어를 사용하면 공유자원에 여러 프소세스가 동시에 접근하지 못함 → 동기화 문제가 일어나지 않음

세마포어는 실제로 여러개의 열쇠를 가질 수 있음

정수형 변수, 공유자원이 2개라면 세마포어의 값은 2, → 열쇠 2개로 설정

단점

  • 웨이트 함수와 시그널 함수의 순서를 이상하게 호출해서 세마포어를 잘못 사용할 수 있다는 가능성

섹션5 데드락

교착상태

여러프로세스가 서로 다른 프로세스의 작업이 끝나기를 기다리다가 아무 작업도 진행하지 못하는 상태

이유

공유자원 때문에 발생

  • 어떤 자원을 여러개의 포로세스가 공유하지 않는다면 교착상태는 발생하지 않음

예시) 식사하는 철학자

필요조건

  1. 상호배제 : 어떤 프로세스가 한 리소스를 점유했다면 그 리소스는 다른 프로세스에게 공유가 되면 안됨

  2. 비선점 : 프로세스 A가 리소스르 점유하고 있는데 프로세스 B가 리소스를 뺏을 수 없음

  3. 점유와 대기 : 어떤 프로세스가 리소스 A를 가지고 있는 상태에서 리소스 B를 원하는 상태여야만 함

  4. 원형대기 : 점유와 대기를 하는 프로세스들의 관계가 원형을 이루고 있다는 것

해결방법

교착상태 회피

  • 프로세스들에게 자원을 할당할 때 어느 정도 자원을 할당해야 교착상태가 발생하는지 파악해서 교착상태가 발생하지 않는 자원을 할당함

  • 시스템의 총 자원 : 운영체제는 프로세스들에게 자원을 할당하기 전에 자기가 가지고 있는 전체 자원의 수를 알고 있어야 함

  • 최대 요구 자원 : 프로세스들은 각자 자기가 필요한 자원의 초대 숫자를 운영체제에게 알려줘야 함

교착상태 알아내는 법

  1. 가벼운 교착상태 검출

    • 타이머를 이용하는 방식, 프로세스가 일정시간동안 작업을 진행하지 않는다면 교착상태가 발생했다고 간주하고 교착상태를 해결

  2. 무거운 교착상태 검출

    • 자원할당 그래프를 이용, 현재 운영체제에서 프로세스가 어떤 자원을 사용하는지 지켜보고 교착상태가 발생했다면 해결

섹션 6 컴파일과 프로세스

컴파일언어

개발자가 코드 작성 → 컴파일 → 0과1 기계어로 실행파일 만듦

인터프리터언어

개발자가 작성한 코드를 미리 기계어로 만들지 않고 실행시 코드를 한 줄 씩 해석해 실행하는 언어

프로세스의 메모리 구조

스택 : 지역 변수, 함수 관련 값

힙 : 실행 중 메모리 공간을 할당할 수 있는 유동적인 공간

데이터 : 전역변수나 배열

코드 : 실행해야 할 코드

중간정리

하드웨어, 운영체제 구조, 프로세스

 

회고

  • 운영체제는 강의를 듣고 복습을 하면 이해가 조금 잘 되는데 자료구조와 알고리즘은 이해하는데 시간이 많이 필요하다.. 복습을 더 많이 하고, 관련 서적들도 좀 찾아서 공부해야 할 것 같다

댓글을 작성해보세요.


채널톡 아이콘