반응형

개발공부/운영체제 9

[OS] 프로세스의 주소 공간

Process Address Space 정의 프로그램이 실행되면 메모리에 할당되는 것 구성요소 1. Code Segment 프로그램의 코드가 저장되어 있다. 프로그램의 코드는 바뀌어서는 안 되므로 읽기만 가능하다. 2. Data Segment 전역변수 같은 데이터가 저장되어 있다. 함수 바깥에 있는 데이터를 저장한다. 변수는 변할 수 있으므로 읽고 쓰기가 가능하다. 3. Stack Segment 함수나 지역 변수가 저장되어 있다. 변수는 변할 수 있으므로 읽고 쓰기가 가능하다. 구조 프로그램이 실행되면 프로세스가 생성된다. 메모리에 프로세스의 주소 공간이 할당된다. 주소 공간 안은 Code, Data, Stack 부분으로 이루어져 있다. Code 부분 존재 이유 코드는 프로그램이 만들어지고 나서는 바뀌지..

[OS] CPU Scheduling

스케줄링 CPU를 잘 사용하기 위해 프로세스를 잘 배정하기 조건 : 오버헤드 ↓ / 사용률 ↑ / 기아 현상 ↓ 목표 Batch System: 가능하면 많은 일을 수행. 시간(time) 보단 처리량(throughout)이 중요 Interactive System: 빠른 응답 시간. 적은 대기 시간. Real-time System: 기한(deadline) 맞추기. 스케줄링 종류 스케줄링은 선점 스케줄링, 비선점 스케줄링으로 나뉜다. 프로세스 상태 비선점 스케줄링 : Interrupt, Scheduler Dispatch 선점 스케줄링 : I/O or Event Wait 프로세스의 상태 전이 승인 (Admitted) : 프로세스 생성이 가능하여 승인됨 스케줄러 디스패치 (Scheduler Dispatch) : ..

[OS] System Call

System Call Process 생성과 제어를 위한 System call fork(), exec(), wait() fork(), exec() : 새로운 Process 생성과 관련 있다. wait() : 프로세스 Parent 가 자신이 만든 프로세스인 child의 종료를 기다리는 명령어다. Fork 새로운 Process를 생성할 때 사용한다. code #include #include #include int main(int argc, char *argv[]) { printf("pid : %d", (int) getpid()); // pid : 29146 int rc = fork(); // 새로운 프로세스 생성 if (rc < 0) { // (1) fork 실패 exit(1); } else if (rc ==..

[OS] 데드락(Dead Lock)이란

데드락이란? Process 1과 Process 2가 Resource 1, Resource 2를 모두 얻어야 할 때, t1 : 프로세스1이 자원1을 얻음 / 프로세스2가 자원2를 얻음 t2 : 프로세스1은 자원2를 기다림 / 프로세스2는 자원1을 기다림 서로 원하는 자원이 상대방에 할당되어 있어서 두 프로세스는 무한정 wait 상태에 빠지는 상태를 DeadLock이라고 한다. Dead Lock 프로세스가 자원을 얻지 못해서 다음 처리를 하지 못하는 상태 교착 상태 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다. 데드락이 발생하는 경우 멀티프로그래밍 환경에서 한정된 자원을 얻기 위해 서로 경쟁하는 상황 한 프로세스가 자원을 요청했을 때, 동시에 그 자원을 사용할 수 없는 상황이 발생하면서..

[OS] 세마포어와 뮤텍스 이해하기 | 화장실 예제와 설명

세마포어와 뮤텍스 여러 프로세스나 쓰레드가 공유 자원에 접근하는 것을 제어하기 위한 방법 병행 처리를 위한 프로세스 동기화 기법이다. 뮤텍스 뮤텍스는 화장실이 하나뿐인 식당과 비슷하다. 화장실을 가기 위해서는 카운터에서 열쇠를 받아야 한다. 당신이 화장실을 가려고 하는데 카운터에 키가 있으면 화장실에 사람이 없다는 뜻이고, 당신은 열쇠를 이용해 화장실에 들어갈 수 있다. 당신이 화장실에서 행복한 시간을 보내고 있는데 다른 테이블에 있는 어떤 남자가 화장실에 가고 싶어졌다. 이 남자는 아무리 용무가 급하더라도 열쇠가 없기 때문에 화장실에 들어갈 수 없다. 결국 남자는 당신이 용무를 마친 후 나올 때까지 카운터에서 기다려야 한다. 곧이어 옆 테이블에 있는 남자도 화장실에 가고 싶어져서 이 남자 또한 화장실에..

[OS] 좀비 프로세스 & 고아 프로세스

프로세스 생성 부모 프로세스가 자식 프로세스를 만드는 것 PCB에 저장된 pid(process identifier)값으로 프로세스를 식별한다. UNIX에서 프로세스 생성 fork() 시스템 호출은 새로운 프로세스를 만들어내는 기능을 한다. 새로운 프로세스는 원래의 프로세스 주소 공간의 복사본을 가지고 있다. fork() : 현재 돌아가고 있던 프로세스를 복사해서 다른 프로세스를 만든다. exec() : 프로세스로 하여금 다른 바이너리를 가지고 새로 시작하도록 한다. 자식 프로세스는 exec을 통해 내용을 모두 바꾼다. fork와 exec의 차이 exec() 기존 프로세스를 덮어버리게 되는 것. 유닉스 체계에 exec만 존재한다면, init 프로세스는 다른 사용자 프로그램에 덮어지게 되고, 커널이 붕괴된다..

[OS] 메모리 단편화

메모리 단편화 RAM에서 메모리의 공간이 작은 조각으로 나뉘어 사용 가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태 내부 단편화 메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 프로세스에서 사용하는 메모리 공간이 낭비되는 상황 예시 메모장을 켰는데 OS가 4kb를 할당해줬다. 그런데 사실상 1kb만큼만 사용하고 있을 때 필요 이상으로 프로세스가 메모리를 할당받았으므로 내부 단편화가 3kb만큼 생긴 것이다. 외부 단편화 메모리가 할당되고 해제되는 작업이 반복되어서 작은 메모리가 중간 중간 존재할 때, 사용하지 않는 메모리가 많이 존재해서 총 메모리 공간은 충분하지만 실제로 할당할 수 없는 상태 예시 메모리 처음 주소에 8mb짜리 프로세스가 할당 되엇고 이어서 16mb 프로세스..

[OS] 가상 메모리와 페이지 교체

가상 메모리 다중 프로그래밍을 실현하기 위해서는 많은 프로세스들을 동시에 메모리에 올려두어야 한다. 가상 메모리는 프로세스 전체가 메모리 내에 올라오지 않더라도 실행 가능하도록 하는 기법이다. 장점 프로그램이 물리 메모리보다 커도 된다. (물리 메모리 크기에 제약받지 않는다.) 더 많은 프로그램을 동시에 실행할 수 있게 된다. CPU 이용률과 처리율이 높아진다. swap에 필요한 입출력이 줄어들어 프로그램이 빠르게 실행된다. 요구 페이징 프로그램 실행 시작 시 프로그램 전체를 디스크에서 물리 메모리에 적재하는 대신, 초기에 필요한 것들만 적재하는 전략 페이지 교체 요구 페이징에서 언급한 대로 프로그램 실행 시 모든 항목이 물리 메모리에 올라오지 않기 때문에, 프로세스의 동작에 필요한 페이지를 요청하는 과..

[OS] 프로세스와 스레드, 멀티 프로세스와 멀티 스레드 설명, 차이, 예상질문

프로그램(Program) 어떤 작업을 위해 실행할 수 있는 파일 프로그램을 실행하면 프로세스가 된다. 프로세스(Process) 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 메모리에 올라와 실행되고 있는 프로그램의 인스턴스 운영체제로부터 시스템 자원을 할당받는 작업의 단위 Code : 코드 자체를 구성하는 메모리 영역 프로그램 명령 Data : 전역 변수, 정적 변수, 배열 등 초기화된 데이터 Heap : 동적 할당 시 사용 new(), mallock() 등 Stack : 지역변수, 매개변수, 리턴 값 임시 메모리 영역 기본적으로 프로세스당 메인 스레드를 포함하여 최소 1개의 스레드를 소유한다. 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수..