컴공/운영체제
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoVZXK%2FbtrTK9XhBLT%2F1WH2WCQMcxcF6aSJ4EtBu1%2Fimg.png)
프로세스와 스레드 차이 많이 헷갈려 하는 포인트
프로세스와 스레드는 독립적인 존재가 아니다 프로세스(process)와 스레드(thread)를 독립적으로 따로 존재하는 개념으로 인식하는 경우가 꽤 있는 것 같다 예를 들어 프로세스 A가 있고, 그 프로세스에 속한 스레드 x가 있을 때 A와 x 둘 다 독립적으로 CPU 코어에서 실행 가능한 존재로 인식하는 것처럼 말이다 오늘은 이 부분을 정리하고자 한다 프로세스와 스레드와 CPU의 관계 프로세스는 메모리에 올라가서 사용자에 의해 컴퓨터 상에서 '실행 중인 프로그램'을 의미하며 그 프로세스의 실행 정보나 상태(메모리 주소 공간, 프로세스 ID, .. etc)는 OS에 의해 관리된다 하지만 실제로 CPU 코어에서 실행되는 것은 스레드다 (이게 매우 중요한 개념 !!) 그렇기 때문에 하나의 프로세스가 CPU 코..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fceylth%2FbtrTMf3KhG1%2FKrvRej9EMTNqRIkKx97nkK%2Fimg.png)
CPU 도움 없이는 스레드 동기화가 어려운 이유
* 스레드 동기화를 설명하고 있지만, 프로세스 동기화 경우에도 딱히 다르진 않습니다 대부분의 락은 CPU 도움이 필요하다 동기화(synchronization)는 여러 스레드들이 동일한 데이터를 쓰고자 할 때 데이터의 변화가 일관성 있게 진행될 수 있도록 만드는 것을 의미한다 동기화는 락(lock)을 통해 구현되며 대표적인 락들은 아래와 같다 spinlock mutex semaphore 이 세 종류의 락은 모두 CPU의 도움을 필요로 한다 오늘은 왜 CPU의 도움이 필요한지 설명드리겠다 👉 락이 어떻게 동기화에 사용되는지 설명하는 글 (이걸 이해해야 아래 내용을 이해할 수 있습니다) 스핀락 사용 예제로 설명하겠다 스핀락은 락을 쥘 때까지 반복해서 락을 쥐려고 시도하는 락이다 그래서 반복문에서 계속 확인을 ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUViv1%2FbtrTMeqja0A%2F4gdeS4FuO3pUxGVGjmkPrk%2Fimg.png)
운영체제에서 락(lock)을 배우는 이유
같은 프로세스에 속하는 스레드는 메모리를 공유한다 프로세스는 서로 겹치지 않게 독립적인 메모리 주소 공간을 부여받기 때문에 따로 shared memery 형태로 쓰지 않는 이상 같은 메모리 공간에 접근할 일이 없어서 같은 데이터에 동시에 접근할 일이 없다 하지만 스레드의 경우에는 얘기가 달라진다 하나의 프로세스가 여러 개의 스레드들을 가질 수 있는데 이때 이 스레드들은 같은 부모 프로세스 소속이기 때문에 메모리 공간 또한 부모 프로세스의 메모리 공간을 공유한다 이렇게 하면 장점은 같은 부모 밑에 있는 스레드들은 따로 추가적인 조치를 해줄 필요 없이 스레드들 사이에서 데이터 공유가 가능해진다 하지만 이로 인해 필연적으로 조심해야 할 부분이 여러 스레드들이 같은 데이터에 접근하다보면 예상했던 것과 다른 결과..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr2twd%2FbtrTKJ5FQlL%2FwxZoMQ0qHk2LjmiDwylBQ0%2Fimg.png)
스레드 컨텍스트 스위칭이 가벼운 이유
* 이 글은 스레드 컨텍스트 스위칭의 정확한 의미를 알고 계시다는 전제 하에 작성된 글입니다 👉 " CPU 코어에서 컨텍스트 스위칭 되는 건 프로세스일까 스레드일까 " 글 보러 가기 일반적으로 '프로세스 컨텍스트 스위칭은 무겁고 스레드 컨텍스트 스위칭은 가볍다' 라고 알려져 있다 왜 그런걸까? 프로세스 컨텍스트 스위칭 vs 스레드 컨텍스트 스위칭 컨텍스트 스위칭은 아래와 같은 작업을 수행한다 (넘버는 실행 순서와는 관계 없음) 1. 현재 실행 중인 프로세스 혹은 스레드의 context 백업 (가령, CPU 레지스터 값들, 어디까지 실행됐는지 등) 2. CPU 캐시를 비움(flush) (CPU 마다 L1, L2 cache에 대한 동작이 다를 수 있음, 심지어 안 비울 수도 있음) 3. TLB(table l..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfj1FI%2FbtrTLIL0O0a%2FERsPBy1mfZJpjplcF5qHNk%2Fimg.png)
CPU 코어에서 컨텍스트 스위칭 되는 건 프로세스일까 스레드일까
프로그램, 프로세스, 스레드 프로세스(process)는 '실행 중인' 프로그램(program)을 의미한다 프로세스는 최소 하나 이상의 스레드(thread)를 가진다 스레드는 CPU 코어에서 실행(execution) 혹은 스케줄링(scheduling)되는 기본 단위(unit)다 프로그램이 메모리에 올라가서 실행 중인 상태가 된 것을 프로세스라고 부르고 한 프로세스는 최소 하나 이상의 스레드들로 동작하게 되며, 이때 이 스레드들 각각이 CPU 코어에서 실행된다고 볼 수 있다 두 종류의 컨텍스트 스위칭(context switching) 컨텍스트 스위칭은 CPU 코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 바뀌는 것을 의미하며 두 종류의 컨텍스트 스위칭이 존재한다 1. 프로세스 컨텍스트 스위칭..