![[인프런워밍업클럽] 2주차 발자국 미션](https://cdn.inflearn.com/public/files/blogs/13e08d71-a4a3-4816-ae7c-097f796510f2/스크린샷 2025-03-09 오후 9.03.19.png)
[인프런워밍업클럽] 2주차 발자국 미션
섹션4 프로세스 동기화
유닛 1 프로세스간 통신
프로세스는 독립적으로 실행 or 다른 프로세스와 데이터를 주고 받으며 통신
통신은 한 컴퓨터 내에서 실행되고 있는 다른 프로세스와 할 수도 있고, 네트워크로 연결된 다른 컴퓨터에 있는 프로세서와 할 수 도 있음
종류
한 컴퓨터 내에서 통신
파일과 파이프
파일
통신을 하려는 프로세스들이 하나의 파일을 이용해 읽고 쓰는 방법
파이프
운영체제가 생성한 파이프를 이용해 데이터를 읽고 쓰는 방법
스레드
코드, 데이터, 힙 영역을 공유하고 스택만 각자 자기의 것을 가지고 있음
데이터 영역에 있는 전역변수나 힙을 이용하면 통신이 가능
네트워크
운영체제가 제공하는 소켓통신이나 다른 컴퓨터에 있는 함수를 호출하는 RPC(원격 프로시저 호출)를 이용해 통신
유닛2 공유자원과 임계구역
공유자원
프로세스 간 통신을 할 때 공동으로 이용하는 변수, 파일
문제
공유 자원은 여러 프로세스가 공유하고 있기 때문에 각 프로세스의 접근 순서에 따라 결과 달라짐
컨텍스트 스위칭으로 시분할 처리를 하기 때문에 어떤 프로세스가 먼저 실행되고 어떤 프로세스가 나중에 실행되는지 예측하기 힘듦
연상결과를 예측하기 힘들고 여기에 발생한 문제를 동기화 문제라고 함
예) 게임을 예시로 듦
캐릭터 총 체력 100, 현재 체력 20
지금은 적에게 공격을 받고 있고 플레이어는 죽지 않기 위해 물약을 먹음
이때 물약을 먹는 코드와 적에게 공격받는 코드에서 발생할 수 있는 동기화 문제를 살펴봄
두 가지 코드가 동시에 실행됐는데 CPU 스케줄러에 의해 공격받는 코드가 먼저 실행됐다고 가정
두번째
임계구역
여러 프로세스가 동시에 사용하면 안되는 영역
경쟁조건
공유자원을 서로 사용하기 위해 경쟁하는 것
임계구역 문제 해결 방법
상호배제의 메커니즘이 필요함
요구사항
주어진 시간에 항상 하나의 프로세스만 임계구역에 접근 가능
동시에 여러개의 요청이 있더라도 하나의 프로세스만 진입하도록 허용
임계구역에 들어간 프로세스는 최대한 빠르게 나와야함 → 다른 프로세스들이 오래 기다리기 떄문에
유닛3 세마포어
프로세스 : 프린트를 사용하려는 직원, 프린터는 여러 프로세스들이 같이 쓰고 있는 공유자원
대기큐 : 프린트를 사용하기 위해 프로세스가 기다리는 공간
운영체제 : 열쇠관리자
세마포어 : 열쇠관리자가 들고 있는 열쇠, 정수형 변수
사용법
세마포어를 사용하면 공유자원에 여러 프소세스가 동시에 접근하지 못함 → 동기화 문제가 일어나지 않음
세마포어는 실제로 여러개의 열쇠를 가질 수 있음
정수형 변수, 공유자원이 2개라면 세마포어의 값은 2, → 열쇠 2개로 설정
단점
웨이트 함수와 시그널 함수의 순서를 이상하게 호출해서 세마포어를 잘못 사용할 수 있다는 가능성
섹션5 데드락
교착상태
여러프로세스가 서로 다른 프로세스의 작업이 끝나기를 기다리다가 아무 작업도 진행하지 못하는 상태
이유
공유자원 때문에 발생
어떤 자원을 여러개의 포로세스가 공유하지 않는다면 교착상태는 발생하지 않음
예시) 식사하는 철학자
필요조건
상호배제 : 어떤 프로세스가 한 리소스를 점유했다면 그 리소스는 다른 프로세스에게 공유가 되면 안됨
비선점 : 프로세스 A가 리소스르 점유하고 있는데 프로세스 B가 리소스를 뺏을 수 없음
점유와 대기 : 어떤 프로세스가 리소스 A를 가지고 있는 상태에서 리소스 B를 원하는 상태여야만 함
원형대기 : 점유와 대기를 하는 프로세스들의 관계가 원형을 이루고 있다는 것
해결방법
교착상태 회피
프로세스들에게 자원을 할당할 때 어느 정도 자원을 할당해야 교착상태가 발생하는지 파악해서 교착상태가 발생하지 않는 자원을 할당함
시스템의 총 자원 : 운영체제는 프로세스들에게 자원을 할당하기 전에 자기가 가지고 있는 전체 자원의 수를 알고 있어야 함
최대 요구 자원 : 프로세스들은 각자 자기가 필요한 자원의 초대 숫자를 운영체제에게 알려줘야 함
교착상태 알아내는 법
가벼운 교착상태 검출
타이머를 이용하는 방식, 프로세스가 일정시간동안 작업을 진행하지 않는다면 교착상태가 발생했다고 간주하고 교착상태를 해결
무거운 교착상태 검출
자원할당 그래프를 이용, 현재 운영체제에서 프로세스가 어떤 자원을 사용하는지 지켜보고 교착상태가 발생했다면 해결
섹션 6 컴파일과 프로세스
컴파일언어
개발자가 코드 작성 → 컴파일 → 0과1 기계어로 실행파일 만듦
인터프리터언어
개발자가 작성한 코드를 미리 기계어로 만들지 않고 실행시 코드를 한 줄 씩 해석해 실행하는 언어
프로세스의 메모리 구조
스택 : 지역 변수, 함수 관련 값
힙 : 실행 중 메모리 공간을 할당할 수 있는 유동적인 공간
데이터 : 전역변수나 배열
코드 : 실행해야 할 코드
중간정리
하드웨어, 운영체제 구조, 프로세스
회고
운영체제는 강의를 듣고 복습을 하면 이해가 조금 잘 되는데 자료구조와 알고리즘은 이해하는데 시간이 많이 필요하다.. 복습을 더 많이 하고, 관련 서적들도 좀 찾아서 공부해야 할 것 같다
댓글을 작성해보세요.