Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 에어플로우
- AWS
- 데이터베이스
- 개념정리
- 웹자동화
- 취준
- 클라우드
- 운영체제
- Service
- Django
- 프로그래머스
- SQL
- CS
- airflow
- 데브코스
- 기술면접
- DataWarehouse
- 파이썬
- 알고리즘
- 자료구조
- 개발
- 관계형데이터베이스
- 웹크롤링
- 데이터엔지니어링
- 데이터웨어하우스
- Amazon
- 부트캠프
- WEB
- 웹스크래핑
- 데이터엔지니어
Archives
- Today
- Total
사진과 음악을 좋아하는 개발자 지망생의 블로그
시스템 구조 & 프로그램 실행(컴퓨터 시스템 구조, 입출력, 동기식 및 비동기식 입출력, 프로그램 실행) 본문
CS/운영체제
시스템 구조 & 프로그램 실행(컴퓨터 시스템 구조, 입출력, 동기식 및 비동기식 입출력, 프로그램 실행)
devculture309 2024. 12. 16. 10:34반응형
1. 컴퓨터 시스템 구조
1) 개요
- 컴퓨터: CPU + 메모리
- 메모리
- CPU의 작업 공간
- CPU는 매 순간 메모리에서 기계어(instructions)를 읽어서 실행하게 됨
- 메모리
- I/O Device
- input: 데이터가 컴퓨터가 들어가는 것 → 마우스, 키보드 등
- output: 컴퓨터에서 데이터를 처리 후 외부로 내보내는 것 → 디스플레이, 프린터, 스피커 등
2) 상세
Mode Bit
- 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 비트
- Mode bit을 통해 하드웨어적으로 두 가지 모드 operation 지원
- 1: 사용자 모드, 사용자 프로그램 수행
- 0: 모니터 모드(= 커널 모드, 시스템 모드), OS코드 수행
- 보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능한 '특권 명령'으로 규정
- Interrupt나 Exception 발생 시 하드웨어가
mode bit
을0
으로 바꿈 - 용자 프로그램에게 CPU를 넘기기 전에
mode bit
을1
로 세팅
- Interrupt나 Exception 발생 시 하드웨어가
Timer
- 특정 프로그램이 CPU를 독점하는 것을 막기 위한 장치→ 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴 → 운영체제가 cpu를 다른 사용자 프로그램에게 넘길때 특정값이 셋팅된 timer를 넣어서 넘김
- 타이머는 매 클럭 틱 때마다 1씩 감소
- 타이머 값이 0이 되면 타이머 인터럽트 발생
- 타이머는 time sharing을 구현하기 위해 널리 이용됨
- 현재 시간을 계산하기 위해서도 사용
Device Controller
- I/O장치를 제어하기 위해 각 디바이스를 전담하는 일종의 작은 CPU
- 제어 정보를 위해 control register, status register를 가짐
- Local Buffer를 가짐 → 일종의 data register
- i/o는 실제 device와 local buffer 사이에서 일어남
- Device controller는 i/o가 끝났을 경우 interrupt로 cpu에 그 사실을 알림
- device controller는 메인 메모리에 접근하지 못하는 대신 local buffer에 접근 가능
- 용어 구분
- Device Driver(장치 구동기): os 코드 중 각 장치별 처리 루틴 → software
- Device Controller(장치 제어기): 각 장치를 제어하는 일종의 작은 CPU → hardware
DMA Controller
- CPU가 모든 입출력(I/O) 작업을 직접 처리하지 않도록 도와주는 장치
- CPU 중재 없이 device controller가 device의 Buffer Storage의 내용을 메모리 block 단위로 직접 전송
- 바이트 단위가 아니라 block 단위로 인터럽트를 발생 시킴
- 즉, DMA 컨트롤러는 CPU가 메모리와 I/O 장치 간의 세부적인 데이터 전송 작업을 직접 수행하지 않도록 하여 CPU의 작업 부하를 줄이고 시스템 성능을 향상시킴
- DMA Controller의 필요성
- DMA Controller가 없을 경우 CPU가 계속해서 I/O 장치의 상태를 확인하고, 데이터 전송 요청과 Interrupt를 처리해야함
- 이렇게 CPU가 모든 I/O 작업을 직접 처리하게 되면 다른 중요한 연산을 수행할 수 있는 시간이 줄어들어 전체 시스템 성능이 저하됨
- DMA 컨트롤러는 CPU의 개입 없이 I/O 장치와 메인 메모리 간 데이터를 직접 전송할 수 있는 장치로 I/O 장치와 메모리 간에 데이터를 직접 전송
- 데이터 전송이 완료되면 DMA 컨트롤러가 CPU에 단 한 번의 인터럽트를 발생시켜 작업 완료를 알림
⇒ CPU의 오버헤드를 줄이고 성능을 향상시키기 위해 필요함
2. 입출력(I/O)의 수행
1) 입출력(I/O)의 수행
- 모든 입출력 명령은 특권 명령임 → 사용자 프로그램이 직접 입출력 명령을 할 수 없으며 시스템 콜(System Call)을 통해 수행함
- 시스템 콜(System Call)
- 사용자 프로그램이 운영체제의 서비스를 받기 위해 Trap 함수를 호출하는 것
- 시스템 콜(System Call)
- 사용자 프로그램은 어떻게 I/O를 하는가?
- 사용자 프로그램이 운영체제에게 I/O요청
- Trap을 사용하여 인터럽트 벡터의 특정 위치로 이동
- 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
- 올바름 I/O 요청인지 확인 후 I/O 수행
- I/O 완료 시 제어권은 시스템콜 다음 명령으로 옯김
2) 인터럽트(Interrupt)
- 인터럽트 당한 시점의 레지스터와 PC(Program Counter)를 저장한 후 CPU의 제어를 인터럽트 처리 루틴에 넘김
- interrupt의 넓은 의미
- interrupt(하드웨어 인터럽트)
- 하드웨어가 발생시킨 인터럽트(타이머, i/o 컨트롤러가 거는 인터럽트) → 보통 말하는 Interrupt
- Trap(소프트웨어 인터럽트)
- Exception: 프로그램이 오류를 범한 경우
- System Call: 프로그램이 커널 함수를 호출하는 경우
- interrupt(하드웨어 인터럽트)
- 인터럽트 관련 용어
- 인터럽트 벡터
- 해당 인터럽트의 처리 루틴 주소를 가지고 있음
- 인터럽트 처리 루틴
- 해당 인터럽트를 처리하는 커널 함수
- 인터럽트 벡터
3. 동기식 입출력과 비동기식 입출력
1) 동기식 입출력 (Sychronouse I/O)
- CPU가 I/O 작업이 끝난 것을 확인한 후에야 사용자 프로그램이 계속 실행될 수 있도록 제어를 넘김
- 보통 Strorage에 데이터가 잘 쓰여졌는지 확인하고 싶을때 동기식 사용
- 구현 방법
- 방법 1
- I/O가 끝날 때까지 CPU를 낭비시키는 방식
- 매시점 하나의 I/O만 일어날 수 있음 → CPU 낭비 뿐만 아니라 I/O 장비 낭비도 유발함
- 방법 2
- I/O가 완료될 때까지 해당 프로그램에서 CPU를 회수
- I/O 처리를 기다리는 프로그램을 대기열에 넣고, 다른 프로그램에 CPU를 할당하여 자원 낭비를 줄임
- 즉, I/O 작업이 끝난 후에야 해당 프로그램이 다시 실행될 수 있음 ⇒ 프로그램 관점에서는 동기적으로 I/O 작업을 기다리는 방식
- 방법1에 비해 낭비가 CPU를 효율적으로 사용할 수 있어 선호하는 방법임
- 방법 1
2) 비동기식 입출력 (Asychronouus I/O)
- I/O 작업을 요청한 후에 바로 사용자 프로그램이 다른 작업을 계속 수행함
- I/O는 보통 비동기식으로 하는 것이 자연스러움
※ 동기식 비동기식 모두 I/O 완료 시 인터럽트로 알려줌
4. 서로 다른 입출력 명령어
1) 일반적인 방식(좌측)
- I/O 작업을 위한 특별한 명령어가 존재함 ⇒ 메인 메모리 접근 명령어와 I/O 작업 명령어가 각각 따로 실행
2) Memory-Mapped I/O (우측)
- I/O 장치의 주소가 메모리 주소 공간 내에 포함되어 있음 ⇒ 메모리 접근 명령어만으로도 I/O 작업을 처리할 수 있음
5. 프로그램 실행
1) 메모리 Load
- 프로그램의 실행 과정
- 프로그램은 실행 파일 형태로 저장되며, 실행 시 메모리로 올라가 프로세스가 됨
- 다만, 물리 메모리에 바로 올라가는 것이 아니라 가상 메모리를 통해 올라감
- 메모리 주소 공간과 가상 메모리
- 프로그램은 실행 시 독자적인 메모리 주소(논리 주소) 공간을 갖게 되며, 이 공간은 코드, 데이터, 스택 영역으로 구성됨
- 이때, 모든 메모리 공간을 물리 메모리에 올리지 않고 필요한 부분만 올려서 메모리 낭비를 줄임
- 사용하지 않는 데이터는 하드디스크의 스왑 영역으로 내리고 필요한 부분만 메인 메모리에 올리며, 이러한 방식을 가상 메모리(Virtual Memory)라고 함
- 파일 시스템과 스왑 영역의 차이
- 파일 시스템은 전원이 꺼져도 데이터가 유지되지만, 스왑 영역은 데이터가 유지되지 않아 다른 방식으로 관리됨
- 메모리 주소 변환(Address Transition)
- 프로세스의 논리 주소를 물리 메모리 주소로 변환하는 주소 변환 계층이 존재하며, 이는 하드웨어 장치로 처리함
2) 커널 주소 공간의 내용
Code
- 자원 관리와 편리한 서비스 제공을 위한 코드가 포함됨
- 시스템 호출(System Call) 및 인터럽트 처리를 위한 코드도 포함되어 있음
Data
- 운영체제에서 사용하는 여러 자료구조가 저장됨
- 각 하드웨어에 필요한 자료구조와 프로세스 관리를 위한 데이터들이 포함됨
Stack
- 운영체제는 함수 호출 구조로 작성되어 있어, 함수 호출 시 스택 영역을 사용함
- 운영체제 코드는 여러 프로그램에서 호출될 수 있으며, 호출 시 사용자 프로그램에 해당하는 함수 내용이 스택에 올라감
3) 함수
사용자 정의 함수
- 프로그램 내에서 직접 정의한 함수
- 사용자가 작성한 코드를 호출하여 사용
라이브러리 함수
- 프로그램 외부에서 가져다 사용하는 함수
- 실행 파일을 생성하면 사용자 정의 함수와 함께 라이브러리 함수도 실행 파일에 포함됨
커널 함수
- 운영체제의 함수로, 시스템 자원 관리를 위한 기능을 제공함
- 커널 함수를 사용자 프로그램이 호출할 때는 시스템 호출(System Call)을 사용하여, 명령어 메모리 주소가 사용자 공간에서 커널 공간으로 전환됨 → 프로세스 메모리 공간에 커널 함수가 저장되는 것이 아님
프로그램 실행 단계
- User Mode (사용자 모드)
- 프로그램이 CPU를 직접 사용하며 실행되는 상태
- 사용자 정의 함수나 라이브러리 함수를 호출해도 이 모드에서 실행됨
- Kernel Mode (커널 모드)
- 프로그램이 시스템 호출(System Call)을 통해 운영체제의 기능을 사용할 때, 커널 모드로 전환됨
- 이때 CPU의 제어권이 사용자 프로그램에서 커널로 넘어가 운영체제가 자원을 관리함
- 모드 전환
- 시스템 호출이 완료되면 다시 User Mode로 전환되며, 사용자 프로그램에게 CPU의 제어권이 반환됨
- 이후 프로그램이 다시 시스템 호출을 하면 다시 Kernel Mode로 전환됨
반응형
'CS > 운영체제' 카테고리의 다른 글
Process(Process, Multi-Process, Context, Process State, PCB, Context Switching) (0) | 2024.12.18 |
---|---|
운영체제와 커널 (2) | 2024.12.17 |