일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Unity
- Class
- 리눅스 마스터 1급
- BFS
- literal
- Reference Type
- Entity
- 자바
- External Scheme
- Physical Scheme
- Entity Set
- systemd
- spring
- 셀레니움
- 리눅스
- Inheritance
- preprocessing
- Java
- 백준
- Operator
- Mac
- python
- OOP
- X.org
- Binary Search
- selenium
- descriptive statistics
- dbms
- X윈도우
- Polymolphism
- Today
- Total
목록분류 전체보기 (197)
Byeol Lo
프로세스는 하나의 실행 프로그램과 하나의 제어 스레드를 가진 것으로 가정했다. 하지만 현재는 대부분 프로세스 하나에 여러 개의 제어 스레드를 포함할 수 있는 기능을 제공한다. 스레드를 사용하여 병렬성의 기회를 식별하는 것은 여러 CPU를제공하는 현대의 다중 코어 시스템에서 점점 더 중요해지고 있다. 여기서는 Pthreads, Windows 및 Java 스레드 라이브러리의 API에 대한 개념과 도전 과제를 비롯한 여러 가지 개념을 보고, 개발자가 병렬성의 기회를 식별하는 데 집중하고 언어 기능 및 API 프레임워크가 스레드 생성 및 관리의 세부 사항을 처리하도록 하는 스레드 생성 개념을 추상화하는 여러 가지 새로운 기능을 볼 수 있다. 스레드는 CPU 활용의 기본 단위이며, 스레드 ID, 프로그램 카운터 ..
이 섹션에서는 네 가지 다른 IPC 시스템을 탐색한다. 먼저 메모리를 위한 POSIX API를 보자. 3.7.1 POSIX Shared Memory POSIX 시스템에서는 공유 메모리와 메시지 전달을 포함하여 여러 IPC 메커니즘이 제공된다. 여기서는 공유 메모리에 대한 POSIX API를 탐색한다. POSIX 공유 메모리는 메모리 매핑된 파일을 사용하여 구성된다. 이는 공유 메모리 영역을 파일과 연관시킨다. 프로세스는 먼저 shm_open() 시스템 호출을 사용하여 공유 메모리 개체를 생성해야 한다. fd = shm_open(name, O_CREAT | O_RDWR, 0666); 첫 매개변수는 공유 메모리 개체의 이름, 공유 메모리에 액세스하려는 프로세스는 이 이름으로 개체를 참조해야 한다. 그 다음 ..
이 전의 방식들은 프로세스들이 메모리 영역을 공유하고, 공유 메모리에 액세스하고 조작하는 코드를 응용 프로그램 프로그래머가 명시적으로 작성해야 한다는 것을 요구한다 하지만 동일한 효과를 달성하기 위한 또 다른 방법이 있었다. 바로 Message-Passing 이다. 이는 프로세스들이 동일한 주소 공간을 공유하지 않고도 통신하고 작업을 동기화하는 메커니즘을 제공한다. 통신하는 프로세스들이 네트워크로 연결된 다른 컴퓨터에 거주할 수 있는 분산 환경에서 특히 유용하다(프로세스간의 통신이 가능하기 때문). 메시지 전달 기능은 최소 두 가지 작업이 필요한데, send(message), receive(message) 이다. 프로세스가 보낸 메시지는 고정된 크기이거나 가변적일 수 있다. 고정된 크기의 메시지만 전송할..
공유 메모리를 사용한 IPC(Inter-Process Communication)은 통신하는 프로세스가 공유 메모리 영역을 설정해야 한다. 일반적으로 공유 메모리 영역은 공유 메모리 세그먼트를 생성한 프로세스의 주소 공간에 존재한다. 이 공유 메모리 세그먼트를 사용하여 통신하려는 다른 프로세스는 해당 세그먼트를 자신의 주소 공간에 첨부해야 한다. 보통 운영 체제는 한 프로세스가 다른 프로세스의 메모리에 액세스하는 것을 막는데, 공유 메모리는 두 개 이상의 프로세스가 이 제한을 해제하기로 합의해야 한다. 그런 다음에 공유 영역에서 데이터를 읽고 쓰는 방식으로 정보를 교환할 수 있다. 데이터의 형식과 위치는 프로세스에 의해 결정되며 운영 체제의 제어 아레에 있지 않게 된다. 또한 프로세스는 동시에 동일한 위치..
운영체제에서 동시에 실행되는 프로세스는 독립 프로세스 또는 협력 프로세스가 될 수 있다. 프로세스가 independent 경우에는 시스템 내에서 다른 프로세스와 데이터를 공유하지 않는다. 프로세스가 cooperating 경우에는 시스템 내에서 다른 프로세스에 영향을 주거나 받을 수 있다. 명백히 다른 프로세스와 데이터를 공유하는 프로세스는 협력 프로세스이다. 이러한 협력을 허용하는 환경을 제공하는 이유는 여러가지가 있는데, Information Sharing: 여러 응용 프로그램이 동일한 정보에 관심을 가질 수 있기 때문에, 이러한 정보에 대한 동시 액세스를 허용하는 환경을 제공해야 함 Computation Speedup: 특정 작업을 더 빠르게 실행하려면 해당 작업을 하위 작업으로 나누어야 한다. 각 ..
대부분 시스템에서 프로세스들은 동시에 실행될 수 있으며, 동적으로 생성 및 삭제가 될 수 있다. 따라서 이러한 시스템의 프로세스 생성, 종료를 위한 메커니즘을 제공해야 한다. 프로세스 생성에 관련된 메커니즘을 보자. 3.3.1 Process Creation 실행 과정 중에 프로세스는 여러 개의 새로운 프로세스를 생성할 수 있다. 생성되는 프로세스는 '부모 프로세스', 부모 프로세스에서 syscall로 생성되는 프로세스를 '자식 프로세스'라고 한다. 이러한 프로세스들은 프로세스 트리(tree)를 형성하게 된다. 대부분의 운영체제에서 프로세스는 일반적으로 정수 숫자인 고유한 프로세스 식별자(pid, process identifie)를 가지며, pid는 시스템 내의 각 프로세스에 대한 primary key가 ..
다중 프로그래밍의 목적은 CPU 활용률을 극대화하기 위해 언제나 어떤 프로세스가 실행 중이어야 한다는 것이다. 반면에 time sharing으 목적은 CPU 코어를 프로세스 간에 자주 전환하여 사용자가 각 프로그램이 실행되는 동안 사용자가 동시에 여러 작업을 수행하는 것처럼 보이게 하여, 각 프로그램이 실행되는 동안 입력을 제공하고 출력을 확인할 수 있도록 하는 것이다. 이 두 목표를 달성하기 위해서 process scheduler 는 각 프로그램이 실행을 위해 사용 가능한 프로세스를 선택한다. 각 CPU 코어는 한 번에 하나의 프로세스만 실행할 수 있다. 단일 CPU 코어 시스템의 경우 한 번에 하나의 프로세스만 실행되므로, 여러 코어 시스템은 한 번에 여러 프로세스를 실행할 수 있다. 단일 CPU 코..
실행 중인 프로그램을 프로세스라고 부른다. 프로세스는 컴퓨팅 아키텍쳐에서 작업 단위라고 볼 수 있다. 운영체제를 논의할 때 제기되는 질문 중 하나는 모든 CPU 활동을 어떤 행위로 부를지에 대한 것이다. 초기 컴퓨터는 jobs이나 사용자 프로그램을 실행하는 batch system이었고, 이후에 time-shared system이 나왔다. 심지어 컴퓨터가 한 번에 하나의 프로그램만 실행할 수 있는 경우에도(멀티 태스킹을 지원하지 않는 임베디드 장치), 운영 체제는 메모리 관리와 같은 자체 내부 프로그램된 활동을 지원해야 할 수 있다. 이런 활동을 모두 프로세스라고 부른다. 개인적으로 더 현대적인 용어인 process를 선호하지만, job 이라는 용어는 역사적 의미가 있다. 운영체제 이론과 용어의 많은 부분..
현대 운영 체제와 같이 크고 복잡한 시스템은 제대로 작동하고 쉽게 수정될 수 있도록 설계되어야 한다. 일반적으로 하나의 단일 시스템 대신 작은 구성 요소 또는 모듈로 작업을 분할하는 방식을 생각할 수 있다. 각각의 모듈은 subsystem에 의해 잘 정의된 부분이어야 하며, 정확하게 정의된 인터페이스(특정 장치나 시스템에 대해 기능이나 동작을 외부에 노출 시키는 방법)와 기능들을 가져야 한다. 프로그램을 구조화할 때 비슷한 접근 방식을 사용할 수 있다. 2.8.1 Monolithic Structure 운영체제를 구성하는 가장 간단한 구조는 구조가 아예 없는 형태이다. 즉, 커널의 모든 기능을 단일한 정적 이진 파일에 넣어 하나의 주소 공간(하나의 컨텍스트 내)에서 실행한다. 이런 접근법을 Monolith..
운영체제를 설계하고 구현하는 데 있어서 마주치는 문제들을 보자. 2.7.1 Design Goals 시스템을 설계하는 첫번째 문제는 '목표' 와 '사양' 을 정의하는 것이다. 원래 높은 계층에서 시스템 디자인은 하드웨어와 시스템 유형에 대해 영향을 받을 것이다. 여기서 시스템 유형은 데스크톱/랩톱, 모바일, 분산, 실시간 시스템 등을 말한다. 그리고 높은 수준의 설계에서는 요구사항을 구체화하기가 더 많이 힘들어질 수 있지만, 이러한 요구사항들은 두 기본적인 그룹으로 나뉘어지며, User Goals 와 System Goals이 있다. 사용자들은 시스템에서 특정한 명백한 속성을 원한다. 시스템은 사용하기 편리하고, 배우기와 사용하기가 쉽고, 신뢰할 수 있고, 안전하며 빠를 필요가 있다. 이러한 명세는 시스템 ..