http://www.kocw.net/home/cview.do?lid=718183c4e4e4861d
프로그램
: 파일시스템의 실행 파일
프로세스
: 프로그램이 실행되어 메모리에 올라간 상태
사실은 중간에 한 단계를 더 거치고 있다 virtual memory
각각의 프로그램은 자신의 memory 주소가 0번지부터 존재하고 있는데,
virtual memory 주소와 physical memory 주소가 존재하는데, 이 과정에서는 주소 변환 (Address Translation)이 필요함
커널 주소 공간, 프로그램의 virtual memory
공간은 코드
, 데이터
, 스택
으로 구성되어있다.
코드
: 실행 파일에 있던 코드가 올라오는 부분으로서 실제 CPU가 실행될 기계어가 위치
데이터
: 프로그램이 실행되다가 메모리 데이터를 사용할 때(변수 사용 등)가 있는데, 이 때 데이터 영역에 위치한다. 모든 데이터가 위치하는 것은 아니고 전역 변수나 프로그램이 실행되면서 종료될 때까지 남아있는 것은 데이터에 위치
스택
: 함수 호출과 리턴에 관련. 함수 호출 시 스택에 쌓아놨다가, 리턴 되면 내용을 읽는 공간. 함수 안에 존재하는 지역 변수
커널도 하나의 프로그램이기 때문에 함수 구조로 구성되어있다.
이 프로그램이 실행될 때 커널의 주소 공간도 코드-데이터-스택으로 구성되어있다.
커널은 운영체제에 함수 형태로 들어가 있어야 한다.
PCB
: Process Controll Block
예를 들어 컴퓨터 안에 프로세스가 10개 돌아가고 있다면, 운영체제는 PCB를 10개 만들어서 관리
운영체제의 스택은 조금 특이한 구조로 구성되어있다.
프로그램 A가 실행하다가 운영체제에 시스템 콜을 해서 서비스를 요청할 수 있는데, 각각 프로그램에 의해 운영체제가 호출이 되고 있는데
누구의 서비스를 수행하기 위해 운영체제 코드가 실행되냐에 따라 커널의 스택은 별도로 두고 있다.
예를 들어, 프로그램 A가 실행되다가 운영체제에 요청 -> 운영체제 코드가 실행 -> 운영체제도 함수로 되어있기 떄문에 스택에 쌓임
이렇게 A에 의해 운영체제가 호출된 거라면 커널 스택은 A의 커널 스택 사용,
B를 실행되다가 운영체제가 호출된 거라면 B의 커널 스택 사용
이런 식으로 각 프로세스마다 별도로 두고 있다. 이는 일반적인 사용자 프로그램의 스택과는 다른 점
사용자 정의 함수
라이브러리 함수
커널 함수
따라서
사용자 정의 함수
, 라이브러리 함수
는 프로세스 A의 Address Space, 내가 만든 프로그램에 들어있는 코드
커널 함수는 내가 갖다 쓰긴 했지만 커널에 들어있는 Kernel Address Space
내가 실행되다가 디스크에서 파일을 읽어온다든지 하는 I/O는 커널에 정의된 함수이기 때문에 사용자 프로그램 안에서 실행되는 게 아니라 커널로 CPU 제어권이 넘어가서 커널 함수가 실행됨! 바로 시스템 콜로~
내가 정의하거나 내가 정의하지 않은 라이브러리 함수, 운영체제의 커널 함수를 불러 사용할 때가 있음.
사용자 정의 함수
, 라이브러리 함수
: 내 주소 공간에 있는 코드가 USER MODE에서 실행
커널 함수
: 시스템 콜을 호출하면, CPU 제어권이 운영체제에 넘어가서 KERNEL MODE에서 운영체제의 주소 공간에 있는 코드가 실행
프로그램이 실행되면 USER MODE - KERNEL MODE 를 왔다갔다 반복하다가 언젠가는 종료된다.