목록Computer Science/Operating System (10)
Kim Jinung
평소에 사용하고 있는 파일과 디렉터리라는 개념을 어떻게 정의하고 있는가? 운영체제가 디스크에 파일을 저장하는 방법 그리고 저장한 파일에 접근하는 방법에 관하여 Basic Concept File: 연관된 정보의 집합으로 운영체제에 의해 구현되는 추상적인 자료형이다. 운영체제는 파일에 대한 system call을 제공하게 된다. File System: 운영체제 내에서 유저가 사용하는 파일을 관리하는 시스템. 운영체제가 이를 제공한다. Directory: 파일들을 그룹핑하고 이러한 그룹들을 계층화 해주는 개념 Device Driver: 운영체제와 I/O 장치 사이에는 드라이버가 존재한다. (운영체제가 모든 하드웨어에 대한 정보를 가지고 있을 수 없으니까, 각 제조사에서 이를 소프트웨어 형태로 제공하는 것임) ..
운영체제와 I/O 장치들이 커뮤니케이션 하는 방법의 종류 그리고 운영체제가 I/O 장치를 위해 제공하는 서비스는 무엇이 있는가? I/O Mechanism Processor Access: 입출력 장치와 CPU가 직접 통신, 주기적으로 CPU가 입출력 장치의 상태를 확인하는 pooling 기법과 DMA를 거치지 않는 기본 인터럽트가 그 예시 Direct Memory Access(DMA): DMA 제어기를 중간에 끼고 통신 ex) CPU - DMA 제어기 - I/O 장치 운영체제의 I/O Service Buffering 두 장치간의 속도 차이를 조절하기 위한 기법이다. Buffer(메모리 영역)라는 임시 저장소를 만들어서 더 느린 장치에 속도를 맞춘다. ex) 초당 네트웍 속도가 10MB이고 데이터 저장 속도..
저장장치를 어떠한 관점으로 접근할 것인가? 유저가 작성한 프로그램은 저장장치에 저장된다. 그리고 이를 실행하기 위해서는 메모리에 적재 해야 한다. 이 상태를 프로세스라고 부른다. 앞서 운영체제가 CPU 사용을 극대화하기 위한 기법들로 프로세스 스케줄링, CPU 스케줄링 그리고 메모리 페이징 기법 등에 관해 정리했다. 그렇다면 실질적으로 프로그램의 저장을 담당하는 저장장치는 어떠한 구조로 구성되어 있을까? 실제로 사용하는 저장장치의 개략적인 구조 그리고 이를 이용한 운영체제 부팅 과정은 어떻게 연결될까? 더 나아가서 저장 장치이므로 다음과 같은 생각을 해볼 수 있다. 어떻게 하면 저장해둔 데이터를 빠르게 탐색할 것인가? 데이터를 어떻게 하면 안정적으로 저장할 것인가? HDD(Hard Disk Drive) ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bXWiMk/btrVI7DVJCk/hyTZjeqAxiJt7J09KYR0jK/img.png)
메모리 관리에 관하여 현대 컴퓨터 시스템에서 프로그램을 실행 하려면 메인 메모리에 적재해야 한다. 운영체제는 CPU 자원의 사용을 극대화 하고 프로세스를 다중으로 실행하기 위해 CPU 스케줄링 기법 등이 발전해왔다. 프로세스 스케줄링, CPU 스케줄링 그리고 멀티 스레드와 같은 기법들이 그 예이다. 그렇다면 실질적으로 CPU가 실행할 명령어나 데이터를 가져오는 메모리는 프로세스를 어떻게 처리하도록 발전했을지 고민해보면 좋을 것 같다. 논리 주소와 물리 주소 프로그램 컴파일 타임과 로드 타임 시에는 논리 주소와 물리 주소가 같다. 그런데 런타임 바인딩 기법에서는 논리 주소와 물리 주소가 다르다. 따라서 프로그램 실행 중 논리 주소를 물리 주소로 변경해주는 하드웨어가 존재한다. 이것이 MMU(Memory M..
프로세스 동기화? 운영체제는 프로세스를 병행, 병렬로 실행하는 방향으로 발전했다. CPU 사용률을 최대화하기 위함이다. 하지만 이로 인해서 프로세스 간에 공유하고 있는 데이터의 조작 결과가 실행 순서에 의존하게 되는 문제가 발생한다. 이것이 경쟁 조건(Race condtion)이다. 다음으로 임계 구역(Critical section)은 공유 데이터가 조작될 수 있는, 즉 경쟁 조건이 발생할 수 있는 코드 영역이다. 그리고 이러한 임계 구역에서 발생하는 경쟁 조건 문제를 임계구역 문제(Critical section problem)으로 부른다. 프로세스 동기화를 위한 하드웨어 지원 Memory Barries: 프로세서가 메모리 변경 결과를 다른 프로세서에 알린다. 하드웨어 명령어 *하드웨어 레벨에서의 제어는..
CPU 스케줄링이 무엇인가? 운영체제는 프로세스 간 CPU 교환을 통해 그 사용률을 극대화한다. 앞서 다룬 병행성을 갖게 해준 멀티 프로그래밍을 떠올리면 된다. 다시 말해 운영체제의 CPU 스케줄링은 준비 큐에서 대기 프로세스를 선택하고 CPU를 할당하는 작업이다. 스케줄링 방법에 따라 프로세스를 처리하는 성능이 좌지우지 되므로 CPU 스케줄링은 운영체제 설계의 핵심이다. 선점 및 비선점 스케줄링 선점 스케줄링: CPU를 프로세스로부터 가져올 수 있는 케이스 비선점 스케줄링: 프로세스가 자발적으로 CPU를 반납하는 케이스 대부분 현대 운영체제에서는 선점 스케줄링을 사용한다. 비선점 스케줄링은 실시간 스케줄링에 적합하지 않다. CPU 제어 권한을 프로세스가 포기하기 전까지 소유하므로 균형있게 CPU소유 시..
스레드란 무엇인가? 프로세스와 스레드? 운영체제가 제공하는 프로세스 모델에서 프로세스는 스레드라는 단위로 작업을 수행한다. (이것은 CPU의 작업 단위이기도 하다.) 초기 컴퓨터 시스템은 싱글 스레드 프로세스만 존재했다. (스레드가 멀티로 구성된다고 해도 결국 병행 실행이라 의미가 없었다.) 폰 노이만 아키텍처에서 프로그램은 메모리에 적재되고 이를 CPU가 연산한다. 그러므로 싱글 코어 CPU 칩에서는 한 번에 하나의 스레드밖에 실행할 수 없다.(하나의 프로세스가 모든 CPU 리소스를 점유하게 되므로) 운영체제에서는 이를 극복하기 위해서 여러 프로세스를 번갈아가며 작업하는 멀티 프로그래밍 기법이 등장했다. 이것이 병행성이다(Parallel). 시간이 흘러 멀티 코어 CPU가 등장했다. 이는 CPU 연산이..
프로세스란 무엇인가? 프로세스는 스토리지에 저장한 프로그램을 메인 메모리에 적재하여 실행 중인 상태다. 현대 컴퓨팅 시스템에서 작업의 단위다. 초기 컴퓨터 시스템은 하나의 프로그램이 시스템을 완전히 제어하므로, 시스템의 모든 자원에 접근할 수 있었다. 운영체제가 등장한 이후 현대 컴퓨팅 시스템은 메모리에 다수의 프로그램을 적재해서 병행 실행할 수 있게 되었다. 이러한 과정을 거치며 운영체제는 여러개의 프로세스를 효율적으로 실행하기 위한 기능을 제공하게 된다. 따라서 포인트는 1. 프로세스는 메모리 상에서 어떻게 구성되어 있는가? 2. 여러개의 프로세스를 어떻게 컨트롤하고 우선순위를 부여하는가? 우선 프로세스는 메모리 상에서 다음과 같이 구성된다. 프로세스의 메모리 배치 텍스트 섹션 - 소스 코드 데이터 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cvovXU/btrURTFXibw/8nkvwqJmk353lCUKDy9OzK/img.jpg)
운영체제는 프로그램이 실행되는 환경을 제공한다. 그리고 이를 위해 인터페이스를 제공한다. 그렇다면 인터페이스는 무엇을 위해 존재할까? 운영체제는 프로그램에 하드웨어 리소스를 할당하는 역할을 담당할 뿐만 아니라 파일 조작, 오류 탐지, 입출력 연산 등의 서비스도 제공한다. 대부분의 프로그램에서 공통적으로 필요한 기능을 운영체제가 제공하는 것이다. 그리고 이러한 서비스를 제공하기 위해서 인터페이스를 제공한다. 기계를 조작하는 리모콘, 운영체제의 그래픽 인터페이스와 커맨드라인 인터페이스 등을 떠올릴 수 있다. 유저는 명령어만 알고있다면 하드웨어를 다루어야 하는 저수준 작업의 내부 코드 및 동작원리를 몰라도 기능을 사용할 수 있다. 이것이 시스템 콜이다. 즉 리모콘이 내부에서 어떠한 일을 하는지는 몰라도 유저가..
운영체제는 컴퓨터 하드웨어를 관리하는 소프트웨어다. 그렇다면 OS가 필요한 이유가 무엇일까? 하드웨어 리소스를 효율적으로 분배해줄 무언가가 필요하다. 특정 프로그램이 하드웨어까지 컨트롤 한다면 운영체제가 필요하지 않다. 하지만 해당 프로그램 하나만 하드웨어를 점유하게 된다. 다시 또 다른 프로그램도 하드웨어를 컨트롤하는 작업까지 담당해야한다. 그렇다면 하드웨어 리소스를 분배해주는 소프트웨어가 존재한다면 애플리케이션 단에서는 복잡성과 반복 작업을 제거할 수 있지 않을까? 초기 컴퓨터는 하나의 프로그램이 하드웨어를 점유해서 다른 프로그램이 동작할 수 없었다. 이후 시분할 시스템이 등장하는 등, 어떻게 하면 하드웨어를 더 효율적으로 사용할 수 있을까 고민하고 발전해온 흔적들을 살펴볼 수 있다. 그리고 이 과정..