컴퓨터 시스템의 구조
컴퓨터는 크게 cpu와 메모리와 i/o디바이스로 구성되어 있다.
메모리는 cpu의 작업공간이다. 운영체제는 처리할 프로그램을 메모리에 올려놓고 한줄씩 cpu로 읽어들여서 작업을 처리한다.
cpu에 대해서
cpu는 매 순간 메모리에 위치한 기계어를 읽어서 실행한다.
cpu에는 다음에 읽을 메모리의 위치를 가리키고 있는 프로그램 카운터(레지스터)가 있다.
cpu 는 아주 빠른 일꾼이다. 혼자서 무엇을 할 수 없다. 프로그램 카운터가 지시하는 메모리 주소로 가서 일을 한다.
만약 인터럽트가 들어왔다면, 하던 작업을 잠시 멈추고, cpu 제어권을 운영체제에게 자동으로 넘어간다.
운영체제는 인터럽트 백터별(인터럽트 번호와 주소를 가지고 있다.)로 인터럽트 루틴을 처리 한다.
레지스터: cpu보다 더 빠른 저장장치.
mode bit이란?
cpu안에는 모드빗이 있다.
운영체제, 커널모드 : 0 :모든 인스트럭션 실행가능. i/o 작업 등..
사용자 모드 : 1 : 모든 인스트럭션 실행 불가능.. i/o 작업 불가능..
사용자 모드에서 i/o 작업을 하려면 시스템 콜(소프트웨어 인터럽트)을 통해서, 모드빗을 운영체제모드로 변경 후 cpu 제어권을 운영체제에게 넘겨서, 운영체제게 i/o 작업을 하게 한다.
(시스템콜 호출시, 그때의 레지스터와 프로그램 카운터를 저장시켜놓는다.)
커널모드 & 유저모드
동기식 입출력이란?
사용자 프로그램이, i/o요청후, 그 i/o 처리가 끝나기 까지 기다린뒤, cpu 제어권을 얻어야만 사용자 프로그램이 무언가를 할 수 있다.
i/o요청이 끝나면 디바이스 컨트롤러가 인터럽트로 알려줌.
-동기식 입출력 구현방법1
매시점 하나의 i/o만 일어나게 처리한다.
cpu가 낭비된다.
-동기식 입출력 구현방법2
i/o처리가 완료될때까지 다른 프로그램에게 cpu를 넘겨준다.
비동기식 입출력이란?
사용자 프로그램이, i/o요청후, 작업을 처리하는 중에도 사용자 프로그램이 cpu 제어권을 얻어서 사용자 프로그램이 무언가를 할 수 있다.
i/o요청이 끝나면 디바이스 컨트롤러가 cpu에게 인터럽트로 알려줌.
인터럽트라인: 한 줄씩 읽다가 디스크에서 뭔가를 읽어와야 한다던지 일을 처리 할때 필요. io디바이스에 접근하기 위해 필요.
설명1) cpu가 디스크로부터 파일을 읽어오기 위해 디스크 컨트롤러에게 일을 시킨다. 디스크 컨트롤러는 읽은 결과물을 자기 로컬 버퍼에 가져다 놓는다. 운영체제는 작업이 처리될동안 다른 프로세스에게 메모리를 할당한다. cpu는 그 이후에 놀지 않고 다른 프로세서가 올라간 메모리에 접근해서 일을 한다.
설명2) 운영체제는 처음에 컴퓨터가 부팅될때 cpu를 가지고 있다가 사용자 프로그램에게 타이머를 셋팅해서 cpu를 넘겨준다. (모드빗은 사용자모드) 사용자 프로그램의 타이머가 완료되면 cpu에게 인터럽트를 건다. 그때 cpu의 제어권이 사용자 프로그램에서 운영체제로 넘어가게 된다. (모드빗은 커널모드) 그리고 다음 프로그램에게 타이머와 함께 cpu 제어권을 넘겨준다. 이 과정을 반복한다.
설명3) 사용자 프로그램이 만약 i/o 디바이스에 접근할려면 잠깐 운영체제에게 알려서 cpu를 운영체제에게 넘겨준다. 운영체제는 i/o디바이스 컨트롤러에게 작업 요청을 내리고 다른 프로그램에게 cpu를 준다. i/o디바이스의 작업이 완료되고 데이터가 로컬 버퍼에 들어왔으면 다시 운영체제에게 인터럽트를 보낸다. 그럼 로컬 버퍼에서 메모리로 데이터가 전달되고, 운영체제는 cpu를 이전에 i/o디바이스 요청을 한 사용자 프로그램에게 할당한다.
용어정리
1.divice driver(소프트웨어) : 하드웨어를 하나 붙이면 (마우스, 프린터 등) 그에 필요한 디바이스 드라이버를 설치해야 한다. cpu가 i/o디바이스에게 일을 시킬때, 디바이스 드라이버를 통해서 명령한다.
2.dma controller : 메모리에 cpu 말고 접근할 수 있다. i/o 장치가 자주 cpu에게 인터럽트를 걸때, cpu의 오버헤드가 커진다. 이것을 방지하기 위해서 존재하며, dma controller는 cpu의 중재 없이 device controller가 디바이스의 버퍼 저장소의 내용을 메모리에 블락단위로 직접 전송 가능하다. 바이트 단위가 아니라 블락 단위로 인터럽트를 발생시킨다.(오버헤드가 적게 발생함.)
3.PC : cpu가 다음번 실행해야될 인스트럭션 라인을 갖고 있다.
4.시스템콜 : 사용자 프로그램이 i/o디바이스를 사용하기 위해 운영체제의 함수를 호출 하는 것( 소프트웨어 인터럽트, 트랩)
5.디바이스 컨트롤러 : i/o 장치를 전담하는 작은 cpu. 데이터 저장을 위한 로컬 버퍼나 제어를 위한 레지스터, 상태값을 저장할 수 있는 레지스터가 존재한다. 로컬버퍼에 작업물이 쌓이면, 인터럽트가 발생되고, cpu는 os로 넘어가서 os는 로컬버퍼에 접근해서 로컬 버퍼 내용을 메모리로 옮겨 놓는다.
6.타이머 : 특정 프로그램이 cpu독점을 막기위한 장치. 타이머 시간이 0이 되면, 인터럽트를 걸어서 cpu를 넘겨준다.
7모드빗: cpu제어권을 누가 가지는지를 나타낸다. 모드빗이 0이면 커널, 운영체제가 cpu 제어권이 있으며, 무슨 일이든 다 할 수 있다. 반면 모드빗이 1이면 사용자프로그램이 cpu제어권을 가지며 제한된 기능만 사용가능하다. 예로 i/o 입출력이나 디스크에 접근할려면 운영체제에 시스템 콜을 해서 모드빗일 0으로 만들고 운영체제를 통해서 i/o입출력이나 디스크 접근을 해야 한다.
저장장치의 계층구조
위로 갈수록 속도가 빠르다. 하지만 가격은 비싸고, 용량은 작다.
연두색부분: 휘발성(전원이 꺼지면 데이터도 날라간다), cpu가 직접 접근가능하다.
빨간색부분 : 비 휘발성(전원이 꺼져도 데이터가 보존된다), cpu가 직접 접근이 불가능하다
캐싱: 더 빠른 저장시스템으로 정보를 복사해놓는일.
프로그램의 실행- 메모리 로드
어떤 프로그램 실행시키면 독자적인 가상 주소공간이 형성된다. 각 프로그램마다 만들어지는데, 이 공간은 코드(기계어코드) , 데이터(전역변수 등) , 스택(함수 리턴 값등)으로 구성되어진다. 가상 주소 공간을 당장 필요한 부분만 물리적 메모리에 올린다. 필요없는 부분은 스왑영역으로 내려놓는다. (메모리 절약)
*스왑영역: 하드디스크를 메모리의 연장으로 사용한다.
가상주소와 물리주소의 주소가 다르다. 하드웨어의 지원을 받아서 주소변환이 이루어진다.
커널 주소 공간의 내용
코드에는 운영체제의 기능(함수)이 들어있다. 모든 프로그램은 함수로 이루어져 있다. 운영체제도 프로그램이다.
시스템안에 프로그램이 돌아가면 운영체제 안에 그 프로그램을 관리하기위한 pcb가 만들어진다.
사용자 프로그램이 사용하는 함수
위 그림에 보면 사용자정의함수, 라이브러리 함수 메모리에는 커널 함수가 없다. 서로 다른 메모리다. 그래서 커널 함수를 실행할려면 시스템 콜을 이용해서 cpu제어권을 운영체제에게 넘겨야한다
프로그램의 실행
유저모드와 커널모드의 연속이다.
참고: 이화여대 반효경 교수님 운영체제 강의정리
'컴퓨터 기초 > 운영체제 이론' 카테고리의 다른 글
[운영체제 정리] 6.CPU 스케쥴링 (0) | 2020.06.02 |
---|---|
[운영체제 정리] 5.프로세스 관리 (0) | 2020.06.01 |
[운영체제 정리] 4.스레드 (0) | 2020.05.30 |
[운영체제 정리] 3.프로세스 (0) | 2020.05.29 |
[운영체제 정리] 1.운영체제 개론 (0) | 2020.05.28 |