✅ 해당 글은 저의 주관이 가득 섞인 내용입니다. 특히 질문한 이유, 면접관의 의도 등은 개인적인 생각임을 밝힙니다.
(0) 시간이 없어서 죄송해요 전체 글을 못읽겠어요. 빠르게 원하는 것만 가져갈게요!
자원 : 프린터, 입출력 장치, 메모리, 프로세서 등등
공유영역 : 메모리 (왜 메모리가 공유영역인가?)
공유자원 : 메모리를 제외한 모든 자원
병행 : 프로세스의 수명 주기가 겹치지만? 동시에 실행되지는 않는다.
병렬 : 동시에 실행이 가능하다.
(1) 오늘은 음식은 배경지식
우리는 생각해본적이 있을 수도 있고, 없을 수도 있고?
어떻게 컴퓨터는 우리가 원하는 것을 동작시켜주게 될까? 지금 제가 쓰고있는 글도 어떻게 거의 즉각적인 반응으로 글자를 화면에 보여줄 수 있을까? 내 마우스 클릭이 어떻게 바로 반응을 할까? 그리고 이러한 명령을 누가 수행할 수 있을까? 여러가지 생각을 할 수 있습니다. 생각해보면 참 대단한 물건이긴 합니다. 컴퓨터라는 것이 내 옆에 가까이 있어서 그렇지 실제로는 어마무시한 물건이죠. 그래서 오늘은 운영체제가 어떤 방식으로 명령을 처리하는지에 대한것을 말해보려고 합니다.
먼저, 우리는 프로세서, 메모리, 키보드,마우스,프린터 등등 이런것을 자원이라고 부릅니다. 이 자원을 사용해서 우리가 원하는 것을 실행할 수 있는 것이죠. 근데 얘네들도 두가지로 나눌 수 있습니다. 메모리를 제외한 나머지 자원을 공유자원이라고 부릅니다. 그리고 메모리는 공유영역이라고 부릅니다.
📌왜 공유 자원이냐? 모든 프로세스가 다 사용할 수 있고, 한번에 하나의 프로세스만 접근할 수 있기 때문에 공유자원이라고 부릅니다. 사실상 한번에 하나의 명령만 수행하기 때문에 그렇다고 생각합니다. 그렇다면? 왜 메모리를 공유 영역이라고 부를까? 여러 프로세스가 동시에 접근이 가능하기 때문입니다. 하나의 프로세스만 접근이 가능하다면? 메모리에 접근할 수 있는 프로세스는 하나이기 때문에 프로그램의 성능이 현저히 떨어지게 되겠죠?
즉, 정리하자면 메모리를 제외한 다른 자원은 공유자원이고 메모리만이 공유영역이 됩니다. 위에 쓴 내용은 제 생각을 넣은 것이기 때문에 완전한 이유는 아닙니다.
그래서 우리는 공유자원과 공유영역이 무엇인지 알게됐고, 프로세스가 접근하는 것 또한 알게됐습니다. 그렇다면 이제는 프로세스가 어떠한 방식으로 접근하는지 알아야 겠죠?
📌병렬과 병행입니다. 공유영역인 메모리에 접근하는 것은 '동시'에 프로세스가 접근하는 것입니다. 그렇다면 무슨 단어가 어울리까요? 바로 병렬입니다. 그렇다면 자연스럽게 공유자원에 접근하는 것은? 병행입니다.
병렬에 대해서 먼저 설명하겠습니다. 병렬은 실제 동일한 시간에 별도의 프로세스가 접근하는 것을 의미합니다. 쉽게 설명해서 한번에 여러개의 프로세스가 접근할 수 있다는 것입니다.
병행은 약간의 어려운 말을 섞자면, 프로세스의 수명주기가 겹쳐 접근하는 것을 의미하는데요? 이는 하나의 프로세스가 다른 프로세스와 겹쳐 실행되어 서로 영향을 줄 수 있는 상태를 의미합니다. 여기서 생각해봐야할 것은 하나의 프로세스가 다른 프로세스와 겹친다는 것입니다. 겹친다면? 분명히 추후 문제가 발생할 수 있겠죠? 이것은 다음 글에서 설명하겠습니다.그리고, 더욱 중요한 것은 겹치다고 하더라도 '프로세스가 모두 동일한 시간에 동작하는 것은 아닙니다.' 굉장히 헷갈리는 문장이죠. 아니 수명주기가 겹친다면서요? 근데 왜 동일한 시간에 동작하는 것이 아닌가요? 아닙니다. 실제로는 운영체제가 적절한 시분할을 통해서 프로세스가 원하는 동작을 실행시켜줍니다.
좀 어렵습니다. 병렬 병행 이름은 비슷해보여도 컴퓨터 내부에서 생각하는 단어와는 좀 차이가 있습니다. 이 내용을 그림으로 설명하면 더욱 편한데 추후에 그림을 올려보도록 하겠습니다. 할 일을 잘 기록해둬야 겠습니다.
어쨌든, 이렇게 공유자원, 공유영역, 병렬, 병행에 대해서 간략하게 설명을 했습니다. 이제 여기서 발생하는 문제에 대해서 생각을 해봐야겠죠? 어떤 문제가 있냐면, 병행에 관해서 문제가 발생합니다.
병행시 각 프로세스가 원하는 자원들이 존재할 것입니다. A 프로세스는 A_ 자원을 원하고 (언더바를 잘 봐주세요.) B 프로세스는 B_ 자원을 원해서 둘다 원하는 자원이 겹치지 않아 문제가 발생하지 않았습니다. 하지만 A가 돌연 B_를 원하네요? 하지만 B는 내어줄 생각을 하지 않습니다. 그렇다면 어떤 문제가 발생할까요? 프로그램이 정상적으로 동작하지 않을 겁니다. 그럼 우리는 이러한 문제가 일어났을 때 해결할 줄 알아야겠죠? 이렇게 프로그램이 다운되는 상황은 여러가지가 있지만 그중 한가지가 이것입니다. 이를 교착상태(DeadLock)이라고 합니다. 멋진 말로는 데드락이라고 불립니다. 데드락을 제외하고 병행 때문에 발생하는 여러 문제가 있습니다. 우리는 이제 이런 문제를 해결할 때 어떻게 해야하는지 말할 줄 알아야 돈을 벌수 있겠죠? 혹은, 문제 파악을 잘 해서 상사한테 칭찬을 받을 수도 있고요. 다음에는 이것과 관련된 내용을 작성하겠습니다.
이만 마치겠습니다. 계속해서 글을 읽어보고 수정하고 업로드할 예정이니 혹시나 불편하고 내용이 이상하다면? 무조건 댓글에 작성해주세요. 제 지식이 잘 못 퍼져나가는 것이 가장 두렵습니다. 감사합니다.
다음 씨면기작은 🔜데드락, 경쟁상태 등등(Dead Lock, Race Condition etc) 입니다.
'CS > 운영체제' 카테고리의 다른 글
프로그램을 더블클릭하거나 명령어를 통해서 실행시켰을때 (0) | 2024.11.24 |
---|---|
[씨면기작] 데드락에 대해서 설명해주세요 (0) | 2024.04.22 |
[씨면기작] 스레드(Thread)란 무엇이고, 왜 문맥교환이 이점을 가져다 주나요? (0) | 2024.04.11 |
[씨면기작] 프로세스의 문맥교환(Context Switching)에 대해서 설명해주세요. (0) | 2024.04.08 |
[씨면기작] 프로세스의 상태변화에 대해서 설명해주세요. (2) | 2024.04.07 |