인프런 워밍업 클럽 스터디 2기 CS 2주차 발자국
인프런 워밍업 클럽 스터디 2기 CS 2주차 발자국
CPU 스캐줄링 프로세스 동기화
임계 구역, 경쟁 조건
상호배제
세마포어
wait와 signal을 사용하여 공유 자원 관리
상호 배제 매커니즘
프로그래밍 언어에서 지원하는 방법
ex ) java에서는 synchronized 사용 이를 사용하면 동시에 여러 프로세스에서 사용할때 상호 배제
데드락
공유자원 때문에 교착상태가 일어난다.
교착상태를 설명하는 유명한 예시 : 식사하는 철학자
교착상태의 필요조건
상호배제
비선점
점유와 대기
원형 대기
데드락 해결 방법
교착상태 회피
프로세스들에게 자원을 할당할 때 어느 정도 자원을 할당해야 교착상태가 발생하는지 파악해서 교착 상태가 발생하지 않는 수준의 자원을 할당합니다.
전체 자원 수와 할당된 자원의 수로 안정 상태와 불안성 상태로 나눌 수 있다.
운영체제는 자기의 가용 가능한 자원을 알고 있어야한다. -> 총자원 프로세스의 최대 요구 자원
안정 상태
불안정 상태
요청이 예상되는 자원 2개를 충족하지 못한다.
모든 프로세스가 최대 자원을 요구하지 않는다면 불안정 상태에 빠지지 않을 수 있지만 불안정상태에 빠지지 않도록 유지하는게 좋다.
교착상태를 해결하는 방법
가벼운 교착상태 검출
타이머를 이용하는 방법
프로세스가 일정 시간동안 작업이 이루어지지 않는다면 교착상태가 발생했다고 간주하고 교착상태를 해결
교착상태를 해결하는 방법
-> 일정 시점마다 체크포인트를 만들어 교착상태를 확인하고 타임아웃으로 교착상태를 알아냈다면 마지막으로 저장했던 상태로 롤백하는 것이다.
무거운 교착상태 방법
자원 할당 그래프를 사용
자원 할당 그래프를 이용하는데 현재 운영체제에서 프로스세가 어떤 자원을 사용하는지 지켜보고 교착상태가 발생했다면 해결합니다.
이 방식은 운영체제가 지속적으로 자원할당 그래프를 유지하고 검사해야하기 때문에 오버헤드가 발생, 하지만 가벼운 교착상태 검출에서 발생할 수 있는 억울 하게 종료되는 프로세스는 발생하지 않음
컴파일과 프로세스
컴파일 언어와 인터프리터 언어 2개로 이루어져 있다.
컴파일은 컴파일 과정에서 개발자가 오류를 일으켰는지 검사하고
인터프리턴는 한줄 한줄 번역하여 실행한다.
프로세스 메모리 구조 복습
code - 실행해야 할 코드가 들어가는 영역
data - 전역 변수나 배열이 들어가는 영역
프로세스가 실행될 때 할당되는 메모리
stack - 지역변수와 함수 관련 값들이 들어간다.
heap - 실행중에 메모리 공간을 할당할 수 있는 유동적인 공간
컴파일 과정
컴파일러를 실생시키려면 전처리 단계를 거친다.
전처리 구문 처리
#include
와 #define
이 있다. 코드의 주석은 제거된다.
전처리기를 거친 이 파일은 컴파일러가 처리합니다.
컴파일러는 어셈블리어로 바꿔준다.
어셈블러는 어셈블리어를 기계어로 바꿔준다.
오브젝트 파일로 만들고 오브젝트는 코드영역과 데이터 영역으로 나누어져 잇다. 이 오프젝트 파일이 실행되기 위해서는 링커를 거쳐야한다.
링커
모든 파일을 하나의 코드 영역과 데이터 영역으로 묶는다.
운영체제는 exe 파일 안에 있는 데이터 영역과 코드 영역을 프로세스의 코드 영여과 데이터 영역에 넣어주고 빈 상태의 스택과 힙을 할당, 그리고 PCB를 만들어 관리가 가능하도록 만들고 PC(Program Counter)에 다음 실행할 명령어의 주소를 생성한 프로세스의 코드 영역의 첫번째 주소로 설정
댓글을 작성해보세요.