카테고리 없음

<운영 체제> 멀티 프로세싱, 멀티 태스킹, 멀티 프로그래밍, 멀티 스레딩.... 멀티??

studying develop 2020. 4. 9. 01:03

나무위키 출처이긴 한데, 굳이 집합 기호로 표현 하면 '병렬 처리 ⊂ 병행(동시) 처리 ⊂ 프로세스 내부의 멀티스레딩 ⊂ 운영체제 차원의 멀티스레딩 ⊆ 멀티태스킹'인 셈. 이라함 

 

음 멀티 스레딩, 프로세싱의 기본적인 차이는 알고 있는 대로였다. 이제 근데 멀티 프로세싱의 경우 IPC에 대해 좀 까먹은 부분이 있고, 그리고 실제로 사용은 거의 멀티 스레딩만 해본거 같아서 와닿지 않는다. 멀티 스레딩의 경우 교착 상태 발생 조건을 다시 봤다.

 

더보기

교착상태 발생 조건

다음 네 가지 조건이 모두 성립될 때, 교착상태 발생 가능성이 있음

  • 상호배제 : 프로세스들이 필요로 하는 자원에 대한 배타적인 통제권을 요구한다.
  • 점유대기 : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
  • 비선점 : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.
  • 순환대기 : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.

 

 

멀티 프로세스의 경우 amp, smp가 있던데 smp가 내가 일반적으로 알고 있던거 였다. 아마 배웠는데 잠깐 지나가서 차이를 까먹은거 같다.

 

 

근데 멀티 타스킹이 ios gcd에서 사용하던건지 모르겠다. gcd에 대해 좀 알아봐야 할거 같다. 작업 큐에 타스크를 넣는게 어떻게 관리되는지 더 자세히 알고 싶다. gcd가 멀티 스레딩을 관리하는거라 적혀있긴한데, 넣는 단위가 타스크라 써있다. 근데, 그 타스크랑 멀티에서 타스크랑 좀 다른거 같다 ;;. 클로져를 타스크라 하는데 ,여기는 그냥 좀 더 넓은 의미같음.

 

멀티 태스킹은 타스크가 하나의 프로세서 상에서 운영체제의 스케쥴링 방식에 따라 조금씩 번갈아 가면서 수행되는 것이 멀티 태스킹의 개념이고, 그중 한 스케줄링 방식이 멀티 프로그래밍이라고 하심.

 

어쨌든 다음에 나오는 개념이 멀티 타스킹에 나온다는 걸 아는게 좋은거 같다. 멀티태스킹의 스케줄링 방식이 몇가지 있는데 멀티 프로그래밍 방식, 시분할 방식, 실시간 시스템 방식이 있다. multi-programming, time-sharing, real-time. 그리고 멀티 태스킹은 두 종류로 나뉜다. 한개는 비선점형 멀티태스킹, 나머지는 선점형 멀티 태스킹이다. 

 

멀티 프로그래밍은 단일 프로세서 상에서 여러개의 프로그램이 동시에 실행되는 것을 말한다.

 

[https://donghoson.tistory.com/17]

 

 

 

 

그리고 두 자료에 대해 공부하면 좋을거 같다. C++ Concurrency in Action 이 책 추천 받음, [https://youtu.be/QIHy8pXbneI] 이 영상도 추천받음.

 

 

일단 다중 프로세스에서는 프로세스들이 vm을 개별적으로 갖는다 함.

 

다중 스레드에서는 vm을 공유 이게 무슨 말인가 했는데, 음 메모리보다 더 확장된 개념으로 생각할 수 있게 해주는거 같다. 메모리 영역 대신 vm영역이라 하면.

 

더보기

1. 개요[편집]

일반적으로 한 시스템의 여러 프로세스들은 CPU와 메인 메모리를 공유한다. CPU를 공유하는 부분에 대해서는 일반적으로 순서를 기다리느라 단지 느려질 뿐이고 심각한 오류는 발생하지 않는다. 그러나 프로세스들이 존재하는 메모리가 여유가 없이 지나치게 많은 요구에 의해 오염될 경우,[1] 프로그램의 논리와 무관하게 오류가 난다. 이를 방지하기 위한 기술이 바로 가상메모리이다.

이런 가상메모리 기술은 무엇보다도 사용자가 신경 쓸 필요 없이 OS 측면에서 자동으로 작동한다는 점이고 또한 사용자가 프로세스를 올리고 내림에 있어서 역시 사용자가 신경 쓸 필요 없이 OS의 가상메모리를 활용하여 자동으로 메모리 관리를 위임할 수 있다는 점이 가장 큰 성공 요인일 것이다.

2. 기능[편집]

가상 메모리의 주요한 기능은 다음 3가지로 요약할 수 있다.

  • 주기억장치의 효율적 관리 : 주기억장치[2]를 하드디스크에 대한 캐시로 설정하여, 당장 사용하는 영역만 유지하고 쓰지 않는 데이터는 하드디스크로 옮긴 뒤, 필요할 때만 램에 데이터를 불러와 올리고 다시 사용하지 않으면 하드디스크로 내림으로써 램을 효과적으로 관리한다.

  • 메모리 관리의 단순화 : 각 프로세스마다 가상메모리의 통일된 주소 공간을 배정할 수 있으므로 메모리 관리가 단순해진다.

  • 메모리 용량 및 안정성 보장 : 한정된 공간의 램이 아닌 거의 무한한 가상메모리 공간을 배정함으로써 프로세스들끼리 메모리 침범이 일어날 여지를 크게 줄인다.[3]

3. 방식[편집]

하드디스크 SSD 등의 보조기억장치에 주기억장치, 즉 램의 내용 일부를 전달해 쓰고 읽는 식이다. 가상메모리의 크기와 구조는 운영체제에 따라 다르다.

4. 특징[편집]

보조기억장치의 속도가 주기억장치인 RAM보다 매우 느리기 때문에 RAM 용량을 초과하는 데이터를 다뤄서 보조기억장치를 끌어다 쓰게 될 경우 시스템의 속도가 확연히 느려진다. NVMe 방식을 쓰는 고급형 SSD의 데이터 전송 속도조차 DIMM의 1세대 메모리인 DDR1 RAM 의 최고 전송속도인 1,600~3,200 MB/s수준에 불과하다.[4] 게다가 그건 순차 읽기/쓰기 기준에서나 통하는 얘기고 4k읽기/쓰기로 가면 아직 D램 발끝도 못 따라간다. 램은 순차, 4k 상관없이 일정한 읽기/쓰기 속도를 보장한다. 그게 아니면 정의상 RAM이 될 수 없다. 인텔이 옵테인 메모리로 DRAM의 의존성 줄이겠다고 하는데 일반 낸드 쌈싸먹는 옵테인 조차도 DRAM의 4k읽기쓰기는 절대 못 따라간다. 요즘 대중화된 DDR4 RAM (2,666 MHz 기준)의 속도는 21,300 MB/s 이고, 추가 장착하는 RAM 만큼 대역폭이 또 증가[5]하기 때문에, 평소에 이러한 속도로 작업을 하다가 보조기억장치를 끌어다 쓰게 되면 시스템의 전체적인 성능이 엄청나게 저하된다.

5. 참조[편집]

이 부분들에 대해서 좀 복습해야 할거 같다. 그리고 내가 공부한 내용 위주로 하면 될듯 사실? 임베디드때 많이 배웠다.