일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Binary Search
- preprocessing
- 리눅스 마스터 1급
- selenium
- descriptive statistics
- X윈도우
- Java
- Reference Type
- 자바
- systemd
- literal
- Class
- 리눅스
- Entity
- Physical Scheme
- OOP
- External Scheme
- 백준
- spring
- Unity
- BFS
- Inheritance
- Operator
- 셀레니움
- X.org
- Mac
- Polymolphism
- Entity Set
- python
- dbms
- Today
- Total
목록분류 전체보기 (199)
Byeol Lo
현대 운영 체제와 같이 크고 복잡한 시스템은 제대로 작동하고 쉽게 수정될 수 있도록 설계되어야 한다. 일반적으로 하나의 단일 시스템 대신 작은 구성 요소 또는 모듈로 작업을 분할하는 방식을 생각할 수 있다. 각각의 모듈은 subsystem에 의해 잘 정의된 부분이어야 하며, 정확하게 정의된 인터페이스(특정 장치나 시스템에 대해 기능이나 동작을 외부에 노출 시키는 방법)와 기능들을 가져야 한다. 프로그램을 구조화할 때 비슷한 접근 방식을 사용할 수 있다. 2.8.1 Monolithic Structure 운영체제를 구성하는 가장 간단한 구조는 구조가 아예 없는 형태이다. 즉, 커널의 모든 기능을 단일한 정적 이진 파일에 넣어 하나의 주소 공간(하나의 컨텍스트 내)에서 실행한다. 이런 접근법을 Monolith..
운영체제를 설계하고 구현하는 데 있어서 마주치는 문제들을 보자. 2.7.1 Design Goals 시스템을 설계하는 첫번째 문제는 '목표' 와 '사양' 을 정의하는 것이다. 원래 높은 계층에서 시스템 디자인은 하드웨어와 시스템 유형에 대해 영향을 받을 것이다. 여기서 시스템 유형은 데스크톱/랩톱, 모바일, 분산, 실시간 시스템 등을 말한다. 그리고 높은 수준의 설계에서는 요구사항을 구체화하기가 더 많이 힘들어질 수 있지만, 이러한 요구사항들은 두 기본적인 그룹으로 나뉘어지며, User Goals 와 System Goals이 있다. 사용자들은 시스템에서 특정한 명백한 속성을 원한다. 시스템은 사용하기 편리하고, 배우기와 사용하기가 쉽고, 신뢰할 수 있고, 안전하며 빠를 필요가 있다. 이러한 명세는 시스템 ..
기본적으로 한 운영체제에서 컴파일 된 응용 프로그램은 다른 운영 체제에서 실행할 수 없다. 해당 운영 체제의 아키텍처에 맞게 컴파일이 이미 되어 있기 때문에, 실행을 하려면 해당 기계어 들을 다시 다른 운영 체제와 아키텍처에 맞춰주어야 하기 때문이다. 이 문제에서 각 운영체제가 응용 프로그램 사용을 위해 고유한 시스템 호출 세트를 제공하고, 시스템 호출은 운영 체제가 응용 프로그램을 사용하기 위해 제공하는 서비스 세트의 일부다. 시스템 호출이 어떻게든 통일된다고 해도 다른 장벽들이 있어서 우리가 다른 운영체제에서 응용 프로그램을 실행하는 것을 어렵게 만든다. 응용 프로그램을 여러 운영체제에서 실행되게 만드는 방법은 세가지가 있다. 응용 프로그램은 여러 운영체제에서 사용할 수 있는 인터프리터가 있는 int..
주로 거의 모든 프로그램들은 디스크 상에서 이진 실행 파일로 존재한다. CPU에 실행되기 위해, 프로그램은 메모리로 가져와야 하고, 프로세스의 컨텍스트 안에 배치되어야 한다. 소스 파일은 어떤 물리적 메모리에도 로드 될 수 있도록 설계된 객체 파일로 컴파일 된다. 이 형식은 relocatable object file이라고 불리며, 그 다음에 Linker가 이러한 relocatable object file을 single binary executable file로 결합한다. 이 과정을 Linking 과정이라고 하는데, 이 단계 동안에 표준 C 또는 수학 라이브러리(-lm 플래그로 지정)와 같은 다른 객체 파일이나 라이브러리도 포함될 수 있다. Loader는 binary executable file을 메모리에..
현대 시스템의 또 다른 측면은 시스템 서비스의 집합으로 볼 수 있다. 가장 낮은 단계는 하드웨어, 다음은 운영 체제, 그 다음은 시스템 서비스, 그리고 마지막으로 응용 프로그램이 계층적 구조를 이루고 있었다. 시스템 서비스, 또한 시스템 유틸리티로 알려져 있으며, 프로그램 개발 및 실행을 위한 편리한 환경을 제공한다. 그 중 일부는 단순히 시스템 호출에 대한 사용자 인터페이스이며, 다른 것들은 상당히 복잡하다. File Management - 파일과 디렉터리를 생성, 삭제, 복사, 이름 바꾸기, 인쇄, 나열, 액세스, 디렉토리들과 파일들을 조작할 수 있다. Status Information - 날짜, 시간, 사용 가능한 메모리, 디스크 공간의 양, 사용자 수 등을 요청할 수 있다. 더 나아가서는 성능, ..
System calls는 운영체제에서 제공하는 서비스에 대한 인터페이스를 제공한다. 이러한 호출은 일반적으로 C와 C++로 작성된 함수로 제공되며, 저수준의 작업(하드웨어를 직접 접근하는 작업)은 어셈블리 언어 명령어를 사용하여 작성해야 할 수도 있다. 2.3.1 Application Programming Interface 시스템은 초당 수천 번의 시스템 호출을 수행한다. 그러나 대부분의 프로그래머들은 그걸 실감하진 않는다. 일반적으로 프로그램 개발자들은 API(Application Programming Interface)에 따라 프로그램을 설계한다. API는 프로그래머에게 사용 가능한 함수 세트를 지정하고, 각 함수에 전달되는 매개변수와 프로그래머가 기대할 수 있는 반환 값들을 포함한다. 우리가 가장 ..
사용자가 운영체제와 상호작용하는 세 가지 기본적인 방법에는 CLI와 두가지 유형의 GUI가 포함된다. 이 절에서는 간단하게 어떤 인터페이스가 있는지 소개만 하고 넘어간다(굳이 CLI가 어떤건지, GUI가 어떤건지는 경험만 해본다면 다 알 수 있기 때문). 2.2.1 Command Interpreters 대부분의 운영체제, 리눅스, 유닉스, 윈도우 등은 프로세스가 시작될 때나 사용자가 처음 로그인 할 때, command interpreter를 특별한 프로그램으로 인식을 하는데, 다양한 command intepreter들을 선택할 수 있는 시스템에서는, 이러한 interpreter들을 shell 이라고 부른다. 보통 Unix, Linux 시스템에서는 C Shell, Bourne-Again shell, Kor..
운영체제는 프로그램을 실행하기 위한 환경을 제공하는데, 프로그램 및 해당 프로그램의 사용자에게 일부 서비스를 제공한다고 보면 된다. User Interface - 거의 모든 운영 체제에는 사용자 인터페이스(UI)가 있다. 이 인터페이스는 여러 형태로 나타날 수 있는데, 가장 흔한 것은 GUI이다. 그 외에 CLI, NUI 등등 많다. Program Execution - 시스템은 프로그램을 메모리로 로드하고 그 프로그램을 실행할 수 있어야 한다. 프로그램은 실행을 정상적으로 또는 오류가 일어나는 형태로 종료할 수 있어야 한다. I/O Operations - 실행 중인 프로그램은 파일 또는 I/O 장치를 사용할 수 있으며, 특정 장치에 대해서는 특별한 기능이 필요할 수 있다(예: 네트워크 인터페이스에서 읽기..
이제 운영 체제 구현에 중요한 주제인 시스템 내의 data structure에 대해 살펴보자. 1.9.1 Lists, Stacks, and Queues 배열은 각 요소에 직접 액세스 할 수 있는 간단한 데이터 구조다. 주 메모리 또한 이러한 배열로 구성되어 있기 때문에 저장되는 데이터 항목이 한 바이트보다 크면 여러 바이트가 항목에 할당되고 "항목 번호 × 항목 크기" 로 주소가 지정된다. 하지만 크기가 다양한 항목을 저장하거나 남은 항목의 상대적 위치를 보존해야하는 경우에는 배열이 다른 데이터 구조로 대체된다. Singly Linked List - 그 다음 항목을 가르킴. 마지막은 null Doubly Linked List - Singly Linked List에서 확장되어 그 이전의 항목도 가르킴 Ci..
분산 시스템은 물리적으로 분리되고 가능한 경우에는 heterogeneous computer system의 모음으로도 볼 수 있으며, 사용자에게 시스템이 유지하는 다양한 리소스에 대한 접근을 제공하기 위해 네트워크로 연결되게 된다. 공유 리소스에 대한 접근은 계산 속도, 기능, 데이터 가용성 및 신뢰성을 증가시키며, 일부 운영체제는 네트워크 액세스를 파일 액세스의 형태로 일반화 하여 네트워크 세부 정보를 네트워크 인터페이스의 장치 드라이버에 포함시킨다. 다른 운영체제는 사용자가 명시적으로 네트워크 기능을 호출하도록 한다. 일반적으로 시스템은 두 가지 모드의 혼합을 포함하는데 예를 들어서 FTP와 NFS가 있다. 분산 시스템을 생성하는 프로토콜은 해당 시스템의 유틸리티와 인기에 큰 영향을 줄 수 있다. 즉,..