버그 해결을 위한 모든 질문을 던져
0 votes
150 views
안녕하세요.

 

운영체제를 공부하는 중인데, 대학교에서는 시스템 프로그래밍이나 운영체제 수업을 배운 적이 없어 뒤늦게 독학으로 하고있습니다.

 

독학하는 사람들이 그렇지만, 물어볼 곳이 없어서 질문드립니다.

공부하다가 생긴 의문에서 나름대로 답을 생각했는데, 맞는지 잘 모르겠습니다. 구글링해봐도 뚜렷한 답을 못찾았습니다.(아마 제가 못찾은 것이겠지만)

그래서 이 게시판에 질문드립니다. 아시는 분이 있다면 부디 답을 주셨으면 합니다.

 

우선 질문을 드리기전에 멀티코어&멀티프로세스 환경에서 모든 프로세스가 멀티스레드로 작동하고 있다고 가정합니다.

질문을 다음과 같습니다.

 

1. 멀티코어에서 동시에 같은 프로세스가 작동할 수 있습니까?

1.1 프로세스 스케쥴러는 레디 상태의 프로세스가 적재된 레디 큐에서 선별하는걸로 알고있기에, 동시에 같은 프로세스가 실행될 수 없다고 생각합니다. 이게 맞습니까?

 

2. 프로세스에서 I/O 인터럽트가 발생하면, 프로세스가 블로킹 상태가 되어 I/O 완료 인터럽트가 발생할 때까지 레디 큐에 적재되지 않는걸로 알고있습니다.

다만, 이게 멀티 스레드 일 때는 어떻게 됩니까?

스레드 하나에서 인터럽트가 발생하면 스레드가 블로킹이 되고 프로세스가 블로킹이 되는게 아닌걸로 알고있습니다. 그렇다면, I/O 인터럽트가 발생한 프로세스가 실행된다는건, 프로세스 스케쥴러의 단위가 스레드가 된다는 것같은데, 그럴 것같지는 않습니다.

해당 환경에서 프로세스 스케쥴러는 어떻게 작동합니까?

 

구글링도 해봤는데, 답을 못찾았습니다.

 

공룡책이랑 윤성우님의 뇌를 자극하는 윈도우즈 시스템 프로그래밍, 동영상 강의까지 봐서 교과서적인 내용은 알고있다고 생각합니다.

 

혹여나 길어진다면, 포스팅이나 책을 추천해주셔도 감사하겠습니다.
asked (6 point)
수정됨 , 150 views

1 답변

+2 votes
우수 답변

1. 멀티코어에서 동시에 같은 프로세스가 작동할 수 있습니까?
네,  하나의 프로세스 내의 여러개의 스레드가 동시에 작동 됩니다.   그래서 멀티스레드 프로그램은 동기화 문제가 항상 따라옵니다.


1.1 프로세스 스케쥴러는 레디 상태의 프로세스가 적재된 레디 큐에서 선별하는걸로 알고있기에, 동시에 같은 프로세스가 실행될 수 없다고 생각합니다. 이게 맞습니까?

레디큐에는 스레드가 배정되는 것이지 프로세스가 배정되는 것이 아닙니다.
 

 

2.  ...  스레드 하나에서 인터럽트가 발생하면 스레드가 블로킹이 되고 프로세스가 블로킹이 되는게 아닌걸로 알고있습니다. 그렇다면, I/O 인터럽트가 발생한 프로세스가 실행된다는건, 프로세스 스케쥴러의 단위가 스레드가 된다는 것같은데, 그럴 것같지는 않습니다.

 

완전 예전에는 프로세스단위의 스케쥴링이고,  실행의 단위가 프로세스 였으나,  지금은 스레드가 기준입니다.  스레드 단위의 스케쥴링이며,  프로세스는 가상메모리와 스레드의 정보를 모아두는 데이터 덩어리의 개념 입니다.

위의 모든 질문들은 프로세스 스케쥴링, 프로세스 블록  이라는 기준에서 생기는 모호함으로 보여집니다.   스레드 스케쥴링의 개념으로 생각 해보시면 의문점들이 해결 되실듯 합니다.

answered (306 point)
선택됨
답변감사합니다. 말씀하신 것처럼 스레드 스케쥴링의 개념을 이해하지 못했습니다.

그래서 스레드 스케쥴링을 구글링했는데, 프로세스 스케쥴링만 나오는 바람에 이렇게 글을 올렸었습니다.

 

주신 댓글을 보고 다시 천천히 검색해서 범위를 좁혀보니 리눅스의 CFS 알고리즘을 찾았습니다.

SCF 알고리즘으로 이해할 수 있을지 모르겠지만, 이 키워드로 한 번 이해해보겠습니다.

 

다시 한 번 댓글주셔서 감사합니다.

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

359 질문
479 answers
486 댓글
1,898 users