프로세스
: 현재 실행 중인 프로그램
: 입출력 중심(I/O-bound) 프로세스: 계산보다는 입출력을 많이 하는 프로세스
: 계산 중심(CPU-bound) 프로세스: 입출력보다는 계산을 많이 하는 프로세스- 프로세스 메모리 구조
: 리눅스 기준으로 1GB Kernel 영역, 3GB User 영역① text(code) 영역
: 코드 자체를 구성하는 메모리 영역으로 Hex파일이나 BIN파일 메모리
: 프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역
② data 영역
: 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장된다.
: 초기화 된 데이터는 data 영역에 저장되고, 초기화 되지 않은 데이터는 BSS (Block Stated Symbol) 영역에 저장된다.
: 프로그램이 실행 될 때 생성되고 프로그램이 종료 되면 시스템에 반환
: 함수 내부에 선언된 Static 변수는 프로그램이 실행 될 때 공간만 할당되고, 그 함수가 실행 될 때 초기화
Q) data영역과 bss 영역을 구분 하는 이유?
초기화가 되지 않는 변수는 프로그램이 실행될때 영역만 잡아주면 되고 그 값을 프로그램에 저장하고 있을 필요는 없으나 초기화가 되는 변수는 그 값도 프로그램에 저장하고 있어야 하기때문에 두가지를 구분해서 영역을 잡는것이다. 이것이 bss영역을 구분하는 이유이다. 따라서 이러한 bss영역 변수들은 많아져도 프로그램의 실행코드 사이즈를 늘리지 않는다.
③ heap 영역
: 필요에 의해 동적으로 메모리를 할당 하고자 할 때 위치하는 메모리 영역으로 동적 데이터 영역이라고 부르며, 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.
: 이 영역에 데이터를 저장 하기 위해서 C는 malloc(), C++은 new() 함수를 사용한다.
④ stack 영역
: 프로그램이 자동으로 사용하는 임시 메모리 영역이다.
: 지역(local) 변수, 매개변수(parameter), 리턴 값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역이다.
: 함수 호출 시 생성되고, 함수가 끝나면 시스템에 반환 된다.
: 스택 사이즈는 각 프로세스마다 할당 되지만 프로세스가 메모리에 로드 될 때 스택 사이즈가 고정되어 있어, 런타임 시에 스택 사이즈를 바꿀 수는 없다.
: 명령 실행시 자동 증가/감소 하기 때문에 보통 메모리의 마지막 번지를 지정 한다.
∴ HEAP overflow - heap이 위에서부터 주소값을 채워져 내려오다가 stack영역을 침범하는 경우.∴ STACK overflow - stack영역이 heap을 침범.
- 프로세스 상태
① NEW
: 프로세스가 생성 중 (ex. log on, 프로그램의 실행)② Running
: 프로세스가 실행 중 (프로세서에 상주하고 있는 상태)③ Waiting
: 프로세스가 어떤 사건을 기다리고 있는 상태④ Ready
: 프로세스가 프로세서에 할당되기를 기다리고 있는 상태⑤ Terminated
: 프로세스의 실행이 종료된 상태
- PCB(Process Control Block)
: 프로세스마다 존재하는 프로세스 제어 블록(태스크 제어 블록): 프로세스 상태, 프로그램 카운터, CPU 레지스터, CPU 스케줄링 정보, 주기억장치 관리 정보, 회계 정보, 입출력 상태 정보 등
- 프로세스 스케줄링
: 여러종류의 큐로 관리, 일반적으로 연결 리스트로 구현,
: 큐의 헤더는 리스트에 있는 첫번째와 마지막 PCB를 가리키는 포인터를 가지고 있음.
: 각 PCB는 다음 PCB를 가리키는 포인터를 필드로 가지고 있음.■ Job queue : 프로세스가 시스템에 처음 들어와서 대기하는 큐
■ Ready queue : 주기억장치에 적재되어 실행을 기다리는 프로세스를 유지하는 큐
■ Device queue : 장치를 사용하기 위해 기다리는 큐, 각 장치는 자신만의 장치 큐를 가지고 있다.
■ Waiting queue : 특정한 사건마다 그 사건을 기다리는 프로세스를 유지하는 큐
- 프로세스 스케줄러
: 각 큐마다 다음 차례의 프로세스를 결정하여 주는 스케줄러■ Long-term scheduler (Job scheduler)
: 다중 프로그래밍의 정도를 결정: 입출력 중심과 계산 중심 프로세스를 적절한 비율로 선택
: 디스크의 job pool -> Ready queue가 수용하지 못하는 작업은 job pool에 유지
: 유닉스는 사용 x■ Short-term scheduler (CPU scheduler)
: 준비완료 큐에서 다음에 CPU에 할당하여 실행할 프로세스를 결정
: Ready queue -> CPU
■ Medium-scheduler
: 시분할시스템에서 프로세스를 메모리에서 디스크로 옮겨 당분간 실행되지 못하도록 하는 경우가 있다. 이것은 다중 프로그래밍의 정도를 조절하여 프로세스 혼합을 향상시키거나 메모리 요구 사항을 충족시키기 위함이다. 이것을 담당하는 스케줄러- Context switch
: 실행 중인 프로세스의 상태를 보관하고, 새로운 프로세스의 상태 CPU에 적재하는 과정
: 프로세스의 문맥(context)은 프로세스의 PCB에 유지
: 문맥 교환에 소요되는 시간은 순수 오버헤드 (H/W에 의존)
: 극복 방안 특수 명령어, 레지스터 집합, 스레드 사용
- 프로세스 생성
: 프로세스는 수행 도중에 새로운 여러 프로세스를 생성, 이 때 프로세스를 생성하는 프로세스를 부모(parent) 프로세스라 하고, 생성된 프로세스를 자식(child) 프로세스라 함.
: 자식프로세스는 부모 프로세스의 주소 공간의 복사본이 할당 or 자신의 공간에 적재할 프로그램을 가짐: 각 프로세스는 독특한 정수값인 프로세스 식별자(process identifier = pid)에 의해 식별
- 프로세스 종료
: 자신의 마지막 문장을 수행하면 종료, 운영체제에게 자신의 삭제 요청
: 자식은 부모에게 결과 데이터를 전달할 수 있다.
: 부모가 종료되면 모든 자손 프로세스들도 종료
: 유닉스는 고아 프로세스가 새부모가 됨
- 프로세스 간 통신 (IPC, InterProcess-Communication)
: 프로세스가 같은 주소 공간을 공유하지 않아도 프로세스 간에 통신하고 그들의 행동을 동기화해줄 수 있는 메커니즘을 제공
: Shared Memory, Message Passing 방식 -> 동기화 문제: 공유메모리 방식은 소비자, 생산자가 형태
: 메세지 전달 방식으로 직접 통신과 메일박스나 포트로 전달하는 간접 통신
- 원격 프로시저 호출 (RPC, Remote Procedure Call)
: 원격 프로시저 호출은 원격에 있는 프로시저를 마치 지역 프로시저를 호출하듯이 호출할 수 있도록 함
: 소켓보다는 상위 레벨의 통신 메커니즘
: Stub을 이용하여 복잡한 내부 통신을 사용자로부터 숨겨줌.
'Major > Operating System' 카테고리의 다른 글
운영체제 - Process synchronization (0) | 2015.11.10 |
---|---|
운영체제 - CPU schedulering (0) | 2015.11.10 |
운영체제 - Thread (0) | 2015.11.10 |
운영체제 - 기초 (0) | 2015.11.09 |
컴퓨터구조 (1) | 2015.11.09 |