Notice
Recent Posts
Recent Comments
05-17 09:12
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

Byeol Lo

1.5 Resource Management 본문

OS/OS Design

1.5 Resource Management

알 수 없는 사용자 2024. 4. 4. 16:28

 이제 운영체제의 구동 방식을 보았으니 이 구동을 하는 것 자체에서 오는 자원 관리에 대해 알아보자. 시스템의 CPU, 메모리 공간, 파일 저장 공간 및 I/O 장치는 운영체제가 관리해야 하는 자원 중 일부이기에 이를 효율적으로 관리해야 하는 자원이다.

 

1.5.1 Process Management

 프로그램은 그 명령이 CPU에 의해 실행될 때에만 무언가를 수행할 수 있는데, 실행 중인 프로그램은 프로세스라고 한다. 그래서 컴파일러, 워드 프로세싱도 같은 프로그램은 프로세스이다. 이런 프로세스는 실행 중인 프로그램의 인스턴스로 간주할 수 있을테지만, 프로세스라는 것이 더 와닿는 개념임을 알게 될 것이다. 프로세스가 동시에 실행되도록 하기 위해 시스템 호출을 통해 서브프로세스를 생성할 수 있다.

 프로세스는 CPU, 메모리, 파일 및 I/O 장치와 같은 특정 자원이 필요하다. 왜냐하면 프로그램을 돌리는데 있어서 프로그램을 저장하는 공간과 프로그램을 돌려서 목표하고자 하는 결과값을 위한 연산과 그것을 위한 메모리가 있어야 하기 때문이다. 이러한 자원들은 일반적으로 프로세스가 실행 중일 때 할당되며, 프로세스가 시작될 때 얻는 다양한 물리적 및 논리적 자원 외에도 다른 입력이나 설정된 값을 초기화 데이터로 사용할 수 있다. 초기화 데이터는 프로세스가 시작될 때 해당 프로세스가 필요로 하는 모든 정보를 프로그램에 제공하여 작업을 시작할 수 있도록 한다.

  • 실행 중인 프로그램을 프로세스라고 한다.
  • 프로세스가 동시에 실행되도록 하기 위해서 시스템 호출을 통해 프로세스의 서브프로세스를 생성할 수 있다.
  • 프로세스는 CPU, 메모리, 파일, I/O 장치가 필요하다.
  • 프로세스가 실행 될 때 자원이 할당되며, 다양한 물리적 논리적 자원 외에도 다른 입력이나 설정된 값을 초기 데이터로 사용한다.

 따라서 프로세스는 시스템 내에서 하나의 작업 단위라고 생각할 수도 있다. 시스템은 프로세스의 집합으로 구성되며, 일부는 운영 체제 프로세스(시스템 코드를 실행하는 프로세스) 이고, 나머지는 사용자 프로세스(사용자 코드를 실행하는 프로세스)이다. 이러한 모든 프로세스는 하나의 CPU 코어에서 다중화되어 동시에 실행될 수 있거나, 여러 CPU 코어를 통해 별도로 실행된다.

 

1.5.2 Memory Management

 주기억장치는 수십만 개부터 수십억 개의 바이트로 이루어진 큰 배열인데, 이 각 바이트는 고유한 주소를 가진다(컴퓨터 구조 파트). 주기억장치는 CPU와 I/O 장치에 의해 공유되는 빠르게 접근 가능한 데이터의 저장소이고, CPU는 명령어 검색 사이클 동안 주기억장치에서 명령어를 읽고, 데이터 검색 사이클 동안 주기억장치로부터 데이터를 읽고 쓰기도 한다. 앞서 언급한대로, 주기억장치는 일반적으로 CPU가 직접적으로 접근하고 주소를 지정할 수 있는 유일한 대형 저장장치이다.

 프로그램을 실행하기 위해서는 프로그램을 절대 주소로 매핑하고 주기억장치에 로드해야 한다. 프로그램이 실행되면 이러한 절대 주소를 생성하여 메모리에서 프로그램 명령어와 데이터에 접근한다. 그러고 프로그램이 종료되었을때, 해당 메모리 공간이 사용가능하게 선언되고 즉 쓰던 공간을 반환하고, 다음 프로그램을 로드하고 실행할 수 있게 된다.

 CPU의 활용도와 컴퓨터가 사용자에게 응답하는 속도를 개선하기 위해, 메모리 관리가 필요하다. 많은 다양한 메모리 관리 방식이 사용되는데, 다양한 알고리즘은 상황에 따라 효과가 상이하며, 특정 시스템에 메모리 관리 방식을 선택할 때에는 특히 시스템의 하드웨어 설계를 고려해야만 한다. 각 알고리즘은 자체적인 하드웨어 지원이 필요한 것이다.

  • 현재 사용중인 메모리 부분과 해당 부분을 사용하는 프로세스를 추적
  • 필요에 따라 메모리 공간 할당 및 할당 해제
  • 이동할 프로세스(또는 프로세스의 일부), 데이터의 결정, 메모리의 부족(out of memory)

운영체제는 위와 같은 메모리 관리 활동을 하게 된다.

 

1.5.3 File-System Management

 사용자들이 컴퓨터 시스템을 편하게 관리할 수 있도록 운영체제는 정보 저장에 대한 일관된 방식을 제공하는데, 운영체제는 저장 장치의 물리적 특성을 통해 이를 추상화하여 논리적인 저장 단위인 파일을 정의한다. 운영체제는 파일을 물리적 매체에 매핑하고 이러한 파일을 저장장치를 통해 액세스한다.

 파일 관리는 운영체제의 가장 가시성 있는 요소이다(우리가 일반적으로 보는 Finder, File Explorer 등). 이는 여러 종류의 물리적 매체에 정보를 저장할 수 있도록 한다. 보조 저장 장치가 우리의 눈에 가장 잘 띄고 흔하지만, 제 3차 저장장치(USB, 블루레이, ...) 과 같은 장치에도 사용된다. 대부분은 디스크 드라이브와 같은 저장장치가 그 예일 것이며, 각 저장장치는 고유한 특성이 있고, 저장장치마다 액세스 속도, 용량 데이터 전송 속도 및 액세스 방법이 포함된다.

  • 파일 생성 및 삭제
  • 파일을 조직화하기 위한 디렉터리 생성 및 삭제
  • 파일 및 디렉터리를 조작하기 위한 기본 기능
  • 파일을 대량 저장 매체에 매핑
  • 비휘발성 저장 매체에 파일 백업

 따라서 위와 같은 기능들을 운영체제들은 제공하게 된다.

 

1.5.4 Mass-Storage Management

  이제 주기억장치를 백업하기 위한 용도로, 휘발성이 아닌 보조 저장장치를 제공하게 되는데, 대부분의 현대 시스템은 프로그램과 데이터의 주요 온라인 저장 매체로 HDD와 NVM 기기를 사용한다. 컴파일러, 웹 브라우저, 워드 프로세서 및 게임을 포함한 대부분의 프로그램들은 이러한 저장장치에 저장되어 메모리로 로드 될 때까지 기다린다(CPU를 사용하기 위해서는 메모리에 올려 놔야 함). 그러면 프로그램은 자신의 처리 소스 및 대상으로 이 장치를 사용하게 된다. 따라서 보조 저장장치의 적절한 관리는 컴퓨터 시스템에 있어서 중요하며, 운영체제는 다음과 같은 활동을 통해 보조 저장장치 관리와 관련하여 책임을 진다.

  • Mounting and Un-Mounting
  • Free-space Management
  • Storage Allocation
  • Disk Scheduling
  • Partitioning
  • Protection

 이런 보조 저장장치는 자주 사용되고 광범위하게 사용되므로 효율적으로 사용해야 한다. 컴퓨터의 전체 작동 속도는 보조 저장장치 하위 시스템의 속도그 시스템을 조작하는 알고리즘에 달려 있다.

 또한 보조 저장장치가 아니더라도 보조 저장장치보다 속도가 느리고 비용이 적고 보조 저장장치보다 저렴하게 사용할 수 있는 저장소인 제 3차 저장장치에 대한 많은 용도가 있는데, 디스크 데이터의 백업, 사용되지 않는 데이터의 저장, 장기 보존 저장소 같은 것들이 필요할 수 있기에 그에 대안으로 사용된다. 

 

1.5.5 Cache Management

 캐싱은 컴퓨터의 중요한 원리인데, 작동방식은 정보가 일반적으로 일부 저장 시스템(주기억장치 등)에 유지가 된다. 하지만 사용되는 정보는 빠른 접근을 위해 더 빠른 저장 시스템인 캐시로 복사가 되는데, 특정 정보가 필요할 때 우리는 먼저 해당 정보가 캐시에 있는지 확인하고, 캐시에 있다면 우리는 해당 정보를 직접 캐시에서 사용하게 된다. 만약 없다면, 원본에서 정보를 사용하고, 우리가 곧 다시 필요할 것이라는 가정 하에 해당 정보를 캐시에서 복사한다.

 또한 내부 프로그램 가능 레지스터주기억장치에 대한 고속 캐시를 제공한다. 프로그래머는 레지스터 할당 및 레지스터 교체 알고리즘을 구현하여 어떤 정보를 레지스터에 유지하고 어떤 정보를 주기억장치에 유지할지 결정한다. 다른 캐시는 전적으로 하드웨어로 구현된다. 예를 들어, 대부분의 시스템에는 다음에 실행될 명령을 보유하는 명령 캐시가 있다. 이 캐시가 없으면 명령을 주기억장치에서 가져올 때 몇 사이클을 기다려야 할 것이다... 또한 대부분의 시스템에는 메모리 계층 구조에서 하나 이상의 고속 데이터 캐시가 있다. 하지만 이런 것들은 운영 체제의 제어 범위를 벗어나기에 다루지 않는다.

 다시 돌아와서 캐시는 제한된 크기를 가지고 있기 때문에 캐시 관리는 중요한 설계 문제이다. 위의 그림에도 보다시피 캐시는 보통 16MB 미만의 크기를 가진다.

 위는 정보를 저장할 수 있는 매체를 계층적으로 시각화 해놓은 것이다. 저장 계층의 구조의 각 수준 간의 정보 이동은 하드웨어 설계 및 제어 운영 체제 소프트웨어에 따라 명시적 또는 암시적으로 이루어질 수 있다. 예를 들어서 캐시에서 CPU 및 레지스터로의 전송은 일반적으로 하드웨어 기능으로, 운영 체제의 개입이 없다. 반면에 디스크에서 메모리로의 데이터 전송은 일반적으로 운영 체제에 의해 제어된다.

 계층적 저장 구조에서 동일한 데이터는 저장 시스템의 다른 수준에서 나타날 수도 있는데 1을 증가시킬 정수 A가 파일 B에 있고, 파일 B가 하드 디스크에 있다고 가정해보자. 1을 증가시키는 작업은 먼저 A가 있는 디스크 블록을 메인 메모리로 복사하는 I/O 작업을 수행한다. 이 작업은 A를 캐시 및 내부 레지스터로 복사하는 것 또한 수행되어질 것이다(그래야 연산을 할 수 있으니). 따라서 A의 복사본은 여러 장소에 나타난다(하드디스크, 메인 메모리, 캐시 및 내부 레지스터). 내부 레지스터에서 증가 작업이 발생한 후에는 A의 값이 다양한 저장 시스템에서 따라 다르게 된다. 새로운 A의 값이 내부 레지스터에서 하드 디스크로 다시 기록되면 A의 값이 전부 동일해진다.

 한번에 하나의 프로세스가 실행되는 컴퓨팅 환경에서는 이 배열이 어려움을 일으키지 않는데, 하지만 CPU가 다양한 프로세스 간에 번갈아가며 전환되는 멀티태스킹 환경에서는 A에 액세스하려는 여러 프로세스가 있다면, 이러한 프로세스 각각이 A의 가장 최근에 업데이트된 값에 액세스 할 수 있도록 주의가 필요하게 된다. 즉 여러 프로세스가 동일한 데이터에 액세스를 하는 것이다.

 다중 프로세서 환경에서는 각 CPU가 내부 레지스터를 유지하는 동시에 로컬 캐시도 포함되어 있기 때문에 상황이 더 복잡해진다. 이러한 환경에서 A의 복사본은 여러 캐시에 동시에 존재할 수 있고, 여러 CPU가 모두 병렬로 실행되기 때문에 한 캐시에서 A의 값을 업데이트하면 A가 있는 모든 다른 캐시에 즉시 반영되어야 한다. 이러한 상황을 캐시 일관성이라고 하며 이 캐시 일관성을 달성해야 다중 처리 환경에서 여러 캐시 간의 데이터 일관성을 보장하게 된다. 이러한 상황은 보통 하드웨어 문제이기에 운영체제 수준 아래에서 처리가 된다(즉 하드웨어를 담당할게 아니라면 몰라도 됨).

 분산 환경에서는 상황이 더욱 복잡해진다. 이 환경에서는 동일한 파일의 여러 복사본 또는 레플리카가 서로 다른 컴퓨터에 유지될 수 있다. 여러 복제본이 동시에 액세스되고 업데이트 될 수 있으므로 일부 분산 시스템에서는 한 곳에서 복제본이 업데이트 되면 다른 모든 복제본이 가능한 빨리 최신 상태로 유지되도록 해야한다.

 

1.5.6 I/O System Management

 운영체제의 또다른 목적은 특정 하드웨어 장치의 특성을 숨기는 것이다. 예를들어 UNIX에서는 입출력 장치의 특성이 I/O subsystem 에 의해 운영체제의 대부분에서 숨겨진다. I/O subsystem은 여러 구성 요소로 구성되는데, 메모리 관리, 장치 드라이버 인터페이스, 장치들을 위한 드라이버들이 있다.

  • I/O subsystem의 Memory Management component는 buffering, caching, spooling의 기능 수행
  • 일반적인 device-driver interface(장치 드라이버와 하드웨어 장치간의 상호 작용을 방법을 정의하는 것, 소프트웨어임)
  • 특정 하드웨어 장치를 위한 드라이버

 여기서 장치 드라이버는 오로지 device driver만이 해당 장치의 특성을 알고 있다.

'OS > OS Design' 카테고리의 다른 글

1.7 Virtualization  (0) 2024.04.06
1.6 Security and Protection  (0) 2024.04.06
1.4 Operating-System Operations  (1) 2024.04.03
1.3 Computer-System Architecture  (0) 2024.04.01
1.2 Computer-System Organization  (0) 2024.04.01
Comments