-
운영체제(OS) - 2. 컴퓨터 시스템 동작원리Computer Basis/OS 2020. 9. 24. 16:11
1. 컴퓨터 시스템의 구조 및 용어
# 내부장치 # 외부장치
CPU 디스크
메모리 키보드
마우스
모니터
네트워크 장치
# 입력(Input)
내부장치로 데이터가 들어오는 것
# 출력(Output)
외부장치로 데이터가 나가는 것
# 로컬버퍼(Local Buffer)
컨트롤러가 각 장치마다 가지고 있는 작은 메모리에 임시로 저장해놓는 입출력 데이터
장치에서 로컬버퍼로 데이터를 읽어오는 일은 각 장치의 컨트롤러가 담당
2. 프로그램 및 입출력 동작원리
# 입출력 장치들의 동작원리 (디스크는 예시일뿐)
프로그램이 디스크에서 디스크 컨트롤러가 디스크 컨트롤러가 디스크의 로컬버퍼를
데이터 요청 => 디스크에서 데이터를 읽어 => CPU에게 인터럽트 발생 => 해당 프로그램의 메모리로
로컬버퍼에 저장 (CPU가 체크하는 것이 아님) 전달
=> 해당 프로그램이 CPU를 할당받을 경우
다음 명령을 수행할 수 있음을 표시
인터럽트 발생시
처리중이던 프로세스의 현재상태를 먼저 저장합니다.
각 장치의 컨트롤러가 보내는 인터럽트는
CPU 옆에 있는 인터럽트 라인을 통하여 전달됩니다.
인터럽트 이후의 단계는 커널에 정의된 인터럽트 처리루틴에 의해
CPU가 수행하는 일입니다.
CPU는 매 시점 메모리에서 Instruction 을 하나씩 읽어와서 수행하는데,
명령 하나를 수행할 때마다 인터럽트가 발생했는지 확인합니다.
인터럽트 발생시 CPU는 다음 Instruction을 수행하기 전에
인터럽트를 먼저 처리합니다.
3. 인터럽트의 일반적 기능
# 인터럽트 벡터(Interrupt Vector)
인터럽트 종류마다 번호를 정하여,
번호에 따라 처리해야 할 코드(Interrupt service routine)가 위치한 부분을 가리키고 있는 자료구조
# 하드웨어 인터럽트
각 장치들의 컨트롤러가 발생시키는 인터럽트
# 소프트웨어 인터럽트(trap)
소프트웨어가 발생시키는 인터럽트, 주로 트랩(trap) 이라 불린다.
트랩 발생시 CPU를 가지고 있던 프로세스로부터 CPU의 제어권이 운영체제에 이양되어 처리된다.
# 트랩(trap)의 종류
1. 예외(Execption)
프로세스가 비정상적인 작업 또는 권한이 없는 작업을 시도할 때 이에 대한 처리를 위해 발생시키는 인터럽트
(0으로 나누는 연산등) (자신의 메모리 영역 바깥에 접근하려는 시도등)
2. 시스템 콜(System Call)
프로세스가 운영체제 내부에 정의된 코드를 사용하기 위해 운영체제에 서비스를 요청하는 방법
# 프로세스 제어블록(PCB : Process Control Block)
각각의 프로그램마다 하나씩 존재하며, 해당 프로그램의 어느 부분이 실행 중이었는지를 저장하는 자료구조
구체적으로, 프로그램이 실행중이던 코드의 메모리 주소와 레지스터값, 하드웨어 상태 등이 저장됨
CPU가 인터럽트로 인해 새로운명령을 실행하면 기존의 레지스터값들이 초기화 됨
# 오늘날에는 운영체제가 직접 CPU를 점유하는 경우는 인터럽트에 의하지 않고는 발생하지 않는다.
(CPU는 한 프로세스만 점유할 수 있으므로 + 커널은 메모리에만 적재되어있을뿐)
4. 입출력구조
# 동기 입출력 (일반적 방식)
#CPU 점유순서
프로세스A => OS(요청) => 프로세스B => OS(연산결과도착) => 프로세스B => ..... => 프로세스A
보라색 문장은 CPU 효율을 위해 채택하는 일반적인 방법
프로그램 A가 입출력 요청(trap)을 했을때, 입출력 작업이 완료된 후에야 후속작업을 수행할 수 있음
입출력이 진행되는 동안 프로그램 A의 다음명령을 수행하지 않고 기다림
운영체제는 프로그램A를 봉쇄상태(blocked state) 로 전환
봉쇄상태의 프로그램에게는 CPU를 할당하지 않음
CPU를 다른프로그램(B)에게 할당
입출력장치에 큐(device queue)를 두어, 데이터 동기성을 관리 (순서대로 처리하도록)
그래서 일반적으로 CPU는 I/O연산이 없는 프로그램에게 CPU를 할당함
입출력 완료 인터럽트(하드웨어 인터럽트)가 오면 봉쇄상태 해제
A는 CPU를 기다리는 줄에 다시 입장, 차례가 오면 CPU할당 받아 명령수행
# 비동기 입출력
#CPU 점유순서
프로세스A => OS(요청) => 프로세스A => OS(연산결과도착) => 프로세스A
입출력 요청한 프로세스 A 에게 곧바로 CPU 제어권을 주는 방식
입출력 연산과 무관한 작업부터 처리
입출력 완료 인터럽트가 도착하면 그때부터 연산된 데이터를 필요로하는 명령을 수행
5. DMA(Direct Memory Access)
CPU가 지나치게 인터럽트 당하지 않도록 CPU이외에 메모리 접근이 가능한 장치
일종의 컨트롤러로서, 로컬버퍼에서 메모리로 읽어오는 작업을 DMA가 주로 담당한다.
DMA는 바이트단위가 아닌 블록이라는 더 큰 단위로 읽어오며, 작업이 완료됬을시 인터럽트를 발생시킨다
6. 저장장치의 구조
# 휘발성(Volatile)
전원이 나가면 저장된 내용이 모두 사라짐
주로 RAM을 매체로 사용
주기억장치로 사용
# 비휘발성(Non-Volatile)
전원이 나가도 저장된 내용을 기억함
주로 마그네틱 디스크를 사용
보조기억장치로 사용
# 보조기억장치의 용도
1. 파일시스템용
전원이 나가도 유지해야할 데이터를 저장하는 용도 (비휘발성)
2. 스왑영역용
프로그램이 종료될때 삭제되는 메모리의 연장 공간 (휘발성)
# 캐싱기법
상대적으로 용량이 적은 빠른 저장장치를 이용해 느린 저장장치의 성능을 향상시키는 기법
상대적으로 느린 저장장치에 있는 데이터중 당장 사용되거나, 빈번한 데이터를 선별적으로 저장
# 저장장치의 계층
<- 속도up 용량up ->
레지스터 - 캐시메모리 - 메인메모리 - 마그네틱 디스크 - 광디스크 - 마그네틱 테이프
7. 하드웨어의 보안
흔히 운영체제는 다중프로그래밍 환경에서 동작하기에,
각 프로그램이 다른 프로그램의 실행을 방해하거나 프로그램 간 충돌을 막기 위하여
하드웨어에 대한 보안 기법이 필요하다
이를 위하여 운영체제는
기본적으로 커널모드(시스템모드)와 사용자모드 두가지를 지원한다
위험한 연산은 커널모드에서만 실행되게 통제하여 안정성을 확보한다
사용자 프로그램이 CPU를 가지고 있는 동안
운영체제는 실행되지 않기에, 운영체제 자체로는 감시할 수 없다
이를 위한 하드웨어적인 지원으로서,
CPU내부에 모드비트(mode bit)를 두어 사용자프로그램을 감시한다
# 모드비트(mode bit)
CPU는 보안과 관련된 명령을 수행하기전 항상 모드비트를 조사한다
# 특권명령
시스템의 보안과 관련된 명령들
모든 입출력 명령들이 포함된다
# 모드비트가 0 일 경우, 특권명령 수행가능 (커널모드)
# 모드비트 1 일 경우, 특권명령 수행불가능 (사용자모드)
특권명령이 수행될때는 CPU를 운영체제가 가지고 있으므로,
입출력 요청(시스템콜)의 보안성을 검사할 수 있게 된다
그리하여 올바른 요청만 실행하여 보안을 유지할 수 있다
8. 메모리보안
운영체제의 일부인 커널(kernal)이 메모리에 항상 올라와 있기에, 이에 대한 참조를 사용자프로그램이 불가능하게 해야할 필요가 있다
또한, 다른 사용자 프로그램의 메모리영역을 침해하는 일도 있어선 아니될 것이다
기준 레지스터(base register)와 한계 레지스터(limit register) 2개를 사용하여 메모리를 보호한다
기준 레지스터는 어떤 프로그램의 수행동안 그 프로그램이 접근할 수 있는 메모리상의 가장 작은 주소(시작점)를 보관하고 있고,
한계 레지스터는 그 프로그램이 기준 레지스터 값부터 접근할 수 있는 메모리의 범위(프로그램의 길이)를 보관하고 있다.
기준과 한계 사이에 있지 않은 메모리를 참조하는지 하드웨어적으로 체크한다
메모리 접근 명령은 특권명령이 아니나, 기준레지스터와 한계레지스터 값을 세팅하는 연산은 특권명령으로 규정해야한다.
이 기법은 하나의 프로그램이 메모리의 한 영역에 연속적으로 위치할때에 쓸 수 있는 기법이다.
9. CPU 보호
특정 프로그램이 무한 반복문을 수행하는등 부적절한 방법으로 CPU를 독점하는 것을 방지하기 위하여
타이머(timer)라는 하드웨어를 사용하여 인터럽트를 발생시킨다.
타이머는 특권명령으로 일정한 시간 단위로 세팅될 수 있으며, 매 클럭 틱(clock tick) 마다 1씩 감소한다.
타이머는 시분할 시스템에서 현재 시간을 계산하기 위해서도 사용된다
CPU를 할당 받고 명령을 수행하다가 중간에 CPU를 뻇기는 경우는,
타이머에 의해 또는 I/O시스템콜에 의한 경우 두가지이다.
728x90'Computer Basis > OS' 카테고리의 다른 글
운영체제(OS) - 4. 프로세스 관리 (0) 2020.10.06 운영체제(OS) - 3. 프로그램 구조와 실행 (0) 2020.09.26 운영체제(OS) - 1. 운영체제 자원관리 개요(CPU & 메모리 관리) (0) 2020.09.23 운영체제(OS) 기본지식 - 2. MS Windows & Unix 개요 및 비교 (0) 2020.09.22 운영체제(OS) 기본지식 - 1. 운영체제의 정의 & 운영체제의 기능 & 운영체제의 분류 (0) 2020.09.22