1. 컴퓨터 하드웨어는 CPU/메모리/IO디바이스 로 구성 된다.


컴퓨터를 제어하는 CPU가 있듯이 각각의 IO디바이스를 제어하는 디바이스 컨트롤러와 각각의 작업 공간인 로컬 버퍼가 있다.


IO디바이스 접근은 CPU가 직접 하지 않는다. IO 작업은 CPU의 처리 속도보다 현저히 느리기 때문에 CPU를 비효율 적으로 사용하게 된다.


따라서 각각의 디바이스 컨트롤러에게 IO작업을 명령하는 Instruction이 있으며, 디바이스 컨트롤러가 대신 IO작업을 처리하는 중에는 CPU는 다른 프로세싱 작업을 한다.



2. CPU의 역할은 Program Counter 레지스터의 적힌 주소에 있는 명령어를 실행하고 Interrupt 가 들어왔는지 확인할 뿐이다.


OS가 각각의 프로그램에게 CPU를 넘겨 주면서 Timer라는 하드웨어를 사용하여 각각의 프로그램이 CPU를 사용할 수 있는 시간을 정해준다. 


Timer는 지정된 시간이 지나면 CPU에게 Interrupt를 걸고, Interrupt가 들어온것을 확인한 CPU는 CPU를 OS에게 넘겨준다.


이렇게 하지 않으면 특정프로그램이 CPU를 독점하는 현상이 발생하기 때문이다.


특정 프로그램에게 CPU가 넘어가면 OS의 입장에서 CPU를 다시 가져올 다른 방법이 없기 때문에, 프로그램이 스스로 CPU를 돌려주기를 기다릴 수 밖에 없고, 이렇게 되면 특정 프로그램이 CPU를 독점하는일이 발생할 수 있다.





프로그램 실행


프로그램이 사용하는 함수의 종류


1. 사용자 정의 함수


프로그래머가 정의한 함수로 프로세스의 Address space에 코드가 저장되어있다.


2. 라이브러리 함수


프로그래머가 직접 정의 하지 않고 이미 정의된 함수로써, 이 역시 프로세스의 Address space에 코드가 저장되어있다.


(? 동적 링크 라이브러리 DLL은 이런 방식을 사용하지 않는데..)


3. 커널 함수


OS에 등록된 함수로써, 커널의 Address space에 코드가 저장 되어있고, 프로그램이 커널 함수를 호출하는것을 시스템 콜이라고 한다.


시스템 콜


프로그램이 IO 작업을 필요로 한다면 이는 프로그램이 직접 할 수 없고, OS의 도움을 받아야 한다.


프로그램이 실행중 IO작업을 필요로 할때, 스스로 CPU에 Interrupt 를 걸고 CPU를 OS에게 넘겨준다.


걸린 Interrupt를 확인한 OS는 Interrupt 처리 루틴을 이용해 처리한다.


이때 IO디바이스에게 작업을 시킬 수 있고, IO 처리가 끝날때 까진 CPU가 다른 프로세스나 혹은 다른 명령어를 실행한다.


IO작업이 완료된경우 다시 Interrupt가 들어와서 IO작업을 요청했던 프로그램에게 CPU가 돌아간다.



프로그램이 메모리에 로드되는 방법


각각의 프로그램은 실행될때 각각의 주소 공간을 갖는데 이 주소 공간은 논리적인 주소로 물리적인 주소와는 다르다.


실제로 프로그램은 메모리에 전체가 로드되지 않고 즉시 실행에 필요한 일정부분만 메모리에 로드되고, 나머지 부분은 디스크에 남아 분리된다.



이렇게 분리된 파트들을 마치 연결되어 있는듯이 가상적으로 배치시켜 주소를 매김으로써 가상 주소공간을 만들 수 있다.





'시스템 > 운영체제' 카테고리의 다른 글

#4 프로세스의 개념  (0) 2018.09.01
#2 운영체제 발전 과정과 유형  (0) 2018.08.27
#1 운영체제의 소개  (0) 2018.08.26

+ Recent posts