728x90
Overview
- 운영체제 : 컴퓨터 사용자와 하드웨어간의 중개자 역할을 수행
- 목적 : 사용자가 편리하고 효율적으로 프로그램을 실행할 수 있는 환경 제공
- 컴퓨터 하드웨어를 관리하는 소프트웨어
Why study operating system?
대부분의 코드가 운영 체제 위에서 실행되기 때문에 운영 체제의 작동 방식에 대한 지식은 적절하고 효율적이며 효과적인 보안 프로그래밍에 매우 중요하다!
1. What Operating Systems Do
- 컴퓨터 시스템
- 하드웨어(hardware) : 시스템의 기본 컴퓨팅 리소스 제공
- 운영체제(operating system) : 하드웨어 제어와 응용 프로그램 간의 하드웨어 사용 조정
- 운영체제는 다른 프로그램이 유용한 작업을 수행할 수 있는 환경을 제공한다.
- 응용 프로그램(application programs) : 리소스가 사용자의 컴퓨팅 문제를 해결하는 데 사용되는 방식 정의
- 사용자(user)
1-1. 사용자 관점(User View)
- 한 사용자가 리소스를 독점하도록 설계되어있다. (실제 독점이 아닌 사용자 입장에서 독점하는 듯한 환상을 제공한다.)
- 사용자가 수행하는 작업을 최대화한다.
- 대부분이 사용 용이성을 위해 설계된다.
- 사용자 인터페이스(User Interface)
- 터치 스크린(touch screen)
- 음성인식(voice recognition)
- 임베디드 컴퓨터(embeddedd computers)
- (임베디드 장치에서는 운영 체제 및 응용 프로그램이 기본적으로 사용자의 개입없이 실행되도록 설계되었다.)
1-2. 시스템 관점(System View)
- 운영체제는 하드웨어와 가장 밀접한 연관이 있는 프로그램이다.
- 자원 할당자(Resource Allocator)
- 자원 요청에 대한 충돌을 방지하기 위해 효율적이고 공정하게 자원을 할당하는 방법을 결정한다.
- 제어 프로그램(Control Program)
- 오류 및 부적절한 사용을 방지하기 위해 사용자 프로그램을 관리한다.
- I/O 장치의 작동 및 제어를 관리한다.
1-3. 운영체제의 정의(Defining Operating Systems)
- '운영체제'는 많은 역할과 기능을 포함한다.
- 초기 운영 체제는 범용의 다기능 메인 프레임으로 개발되어졌다.
- 무어의 법칙에 따라 컴퓨터가 발전하며 다양한 운영체제 또한 탄생했다.
- 무어의 법칙(Moore's Law) : 집적 회로의 트랜지스터 수가 18개월마다 두 배씩 증가한다는 법칙
- 운영체제를 완전히 정의할 수는 없다.
- 하드웨어 자체만으로는 사용하기 쉽지 않기 때문에 응용 프로그램이 함께 개발되는데, 이때 리소스를 제어하는 일반적인 기능을 수행하기 위해 운영체제가 필요하다.
- 일반적인 운영체제의 개념 - 컴퓨터에서 항상 실행되는 프로그램(: 커널)
- 운영체제 개념의 동향
- 모바일 디바이스 운영체제(ex. iOS, Android) : 커널 + 미들웨어 프레임워크(개발 용이 및 기능 제공) + 시스템 프로그램(시스템 관리)
2. Computer-System Organization
- 일반적인 컴퓨터 시스템 구성
- 구성 요소(CPU, Device Controller)
- 디바이스 컨트롤러 : 일부 로컬 버퍼 스토리지와 특수 목적 레지스터 집합을 유지, 관리
- CPU와 디바이스 컨트롤러는 메모리 사이클에 대한 경쟁을 하며 병렬로 실행이 가능하다.
- 시스템 버스
- 구성 요소 ↔️ 공유 메모리
- 공유 메모리
- 구성 요소(CPU, Device Controller)
- 시스템 작동 방식 설명 : (1) 인터럽트 (2) 스토리지 구조 (3) I/O 구조
2-1. 인터럽트(Interrupts)
- I/O 작업 수행 방식
- 디바이스 드라이버가 디바이스 컨트롤러에 적절한 레지스터 로드한다.
- 디바이스 컨트롤러는 레지스터의 내용을 검사하여 수행 작업을 결정한다.
- 디바이스 컨트롤러는 장치에서 로컬 버퍼로 데이터를 전송을 시작한다.
- 데이터 전송이 완료되면 디바이스 컨트롤러는 디바이스 드라이버에게 작업이 완료되었음을 알린다.
- ⭐️ 이때 디바이스 컨트롤러에서 디바이스 드라이버에게 작업 완료를 알리는 역할을 하는 게 인터럽트이다.
- 이후 디바이스 드라이버는 읽으려는 데이터의 포인터 또는 상태 정보를 반환한다.
- 인터럽트는 운영체제와 하드웨어가 상호 작용하는 방식의 핵심 부분이다.
- CPU가 인터럽트되면 하던 일을 멈추고 즉시 서비스 루틴의 시작 주소로 이동한다.
- 이후, 작업이 완료되면 CPU는 중단되었던 연산을 재개한다.
- 인터럽트 작동 방식
- 인터럽트별 핸들러 호출
- 포인터 테이블을 사용하여 인터럽트 루틴 진행
- 속도 향상, 중간 과정 필요 x
- 포인터 테이블 : 인터럽트 서비스 루틴의 주소를 보유
- 인터럽트 벡터(테이블) - 인터럽트 요청 번호 인덱싱
- 인터럽트 핸들러 루틴으로 이동
- 해당 인덱스 주소에서 서비스 시작
- 이때 인터럽트 핸들러는 작동 중의 모든 상태를 저장 -> 처리 수행 -> 상태 복원을 수행한다.
- 작업이 모두 완료되면 복귀 명령을 실행하여 CPU를 인터럽트 실행 이전 상태로 복원한다.
인터럽트 아키텍처는 인터럽트 처리 전 상태로 복원할 수 있도록 인터럽트된 상태 정보를 저장한다. 이후, 인터럽트가 서비스된 후 이전 리턴 주소로 돌아가, 인터럽트가 발생하지 않은 것처럼 복원하고 이전의 연산을 재개한다.
이러한 인터럽트 메커니즘을 통해 다양한 요청에 비동기 이벤트에 응답할 수 있다.
해당 포스팅은 아래 저서를 토대로 공부한 내용을 작성했습니다.
Operating System Concepts, 10th Edition
(Abraham Silberschatz, Greg Gagne, Peter B. Galvin)
728x90