본문 바로가기

운영체제3

세마포어 / 뮤텍스 개요 여러 스레드들은 자원을 공유하고, 프로세스간 메시지를 전달합니다. 공유된 자원에 여러 프로세스, 스레드가 동시에 접근하면서 여러문제가 발생했습니다. 이런 문제들을 해결하기 위해 동기화를 해주는 기법인 세마포어와 그에 소속된 뮤텍스를 알아봅시다. DeadLock 세마포어는 대표적인 DeadLock회피책의 일종입니다. 개요 공유된 리소스를 여러 스레드가 접근할때 대표적으로 나타나는 문제중 하나입니다. 간단한 DeadLock의 사례입니다. 프로세스 A/B가 리소스 A/B를 모두 얻어야 진행될때, 프로세스가 각각 하나를 사용중인 상태가 된다면 무한정 기다리게 됩니다. 세마포어는 이런 DeadLock이 발생할 수 있는 Critical Section을 관리하는 회피책입니다. 세마포어 개요 세마포어는 리소스의 .. 2020. 6. 18.
스레드 프로세스만 있었을 때 CPU가 프로세스 A를 실행하다가 B를 실행한다고 생각을 합시다. 프로세스 A는 잠시동안 쓸 일 없으니 상태를 PCB에 저장하고, B의 상태를 레지스터에 저장해주어야 합니다. 그리고 또 캐시 메모리에 있던 데이터도 새로운 프로세스에 맞게 바꾸어주어야 합니다. 상당히 시간이 지체되는 작업들이였습니다. 이 두개의 프로세스의 데이터를 서로간 공유를 해주고 싶다고 생각해봅시다. 프로세스들은 독립된 주소공간을 가지고 있기 때문에 공유메모리나 소켓등을 이용하여 접근을 해야합니다. 이런 문제들이 있기때문에 스레드가 등장하게 되었습니다. 스레드의 정의 스레드는 한 프로세스에서 독립적인 순차흐름 또는 제어를 뜻합니다. 프로세스에는 최소 하나 이상의 스레드가 작동하며, 메인 스레드가 존재합니다. 스레.. 2020. 6. 18.
캐시 메모리: 리스트와 벡터의 속도차이 개요 리스트와 벡터, 어떤게 더 빠를까? 이 물음을 듣고나선 고등학생때 배웠던 리스트와 벡터의 차이를 생각해보았습니다. 벡터는 연속된 메모리 주소를 가진 Dynamic Array형태의 자료구조입니다. 리스트는 힙공간에 값을가진 노드가 생성되어있고, 노드가 다음 인덱스의 또 다른 노드를 가르키는 구조입니다. 단편적인 생각으로서는, 리스트와 벡터의 속도 차이에서 가장 큰 차이점은 중간 인덱스에 접근할때 구조적으로 속도 차이가 날수밖에 없다고 생각합니다. 그렇다면 만약에 리스트와 벡터 둘다 순차적으로 접근할때 어느 자료구조가 더 접근이 빠를까? 위와 같은 질문을 토대로 찾아 보았습니다. 답 커트 건서로스의 C++ 최적화: 최고 성능을 구현하는 10가지 검증된 기법에서 답을 찾을 수 있었습니다. 배열이나 벡터처.. 2020. 6. 17.