이번 시간에는 Java의 yield 메서드에 대해서 알아보도록 하겠습니다. 사실, 이것은 백준 사이트에서 yield 관련한 질문이 들어와서 레퍼런스 보면서 조금이나마 알게 되었습니다. 물론, 그 질문에 대한 답은 pc 레지스터와 쓰레드가 어떤 영역을 독립적으로 가지는지에 대해서 찾아보세요. 였지만요. 일단 이 함수는, 설명부터 보는 게 중요할 듯 싶어요. 레퍼런스 사이트에 있는 설명 중 일부만 보도록 하겠습니다. current thread와 스케쥴러가 나오고, 힌트가 나옵니다. 정확하게 해석은 못 하겠지만, 현재 돌고 있는 쓰레드에 대한 무언가의 힌트인 것으로 보여요. 계속 보면 is willing to yield가 나오는데, 양보를 한다는 것이에요. 무엇을? 그것의 current use를. 쓰레드가 프..
OS 검색 결과
식사하는 철학자 문제는 deadlock을 단적으로 보여주는 문제 중 하나입니다. 젓가락이 5개가 있고, 식사를 하기 위해서, 철학자는 자신의 왼쪽, 오른쪽에 있는 젓가락을 들어야 한다고 해 봅시다. 그런데, 사람들이 자기 왼쪽에 있는 젓가락을 든 상태에서, 오른쪽에 있는 젓가락을 얻으려고 한다면 어떨까요? 그리고, 누군가 젓가락을 뺏을 수 없다면? 이럴 때, deadlock이 발생하게 됩니다. 그러면 이 문제를 풀기 위해서 어떻게 해야 하는지 봅시다. 먼저, flag가 있습니다. 이것은 젓가락이 누군가에 의해 집어진 상태인지를 나타냅니다. 5명이 있으니 int형 5개를 저장하는 array를 선언하였습니다. 그리고 people은 현재 식사를 하고 있는 철학자의 수를 의미하는데요. 왜 이 변수를 썼는지 밑에..
임계 영역이 무엇일까요? 이것은 둘 이상의 쓰레드 (worker)가 동시에 접근하면 안 되는, 공유 영역에 접근하는 코드를 말합니다. 다시 말해, 둘 이상의 worker가 동시에 접근하면 문제를 일으킬 수 있는 코드들을 말합니다. 예제 하나를 보면서, 같이 분석해 보도록 하겠습니다. 먼저 ACCOUNT 클래스입니다. remain이라는 필드가 있어요. 이것은 남은 돈을 의미합니다. 이 클래스에는, put_money, 그러니까 입금하는 메서드와 get_money, 출금하는 메서드가 있어요. 이들은 각각 x만큼 넣고 빼는 일을 합니다. 그리고 우리는 Worker의 w1과, Worker2의 w2를 동시에 실행합니다. 이들은 start 메소드가 있는 걸로 보아서는 Thread를 상속했을 거 같네요. run() 메..
3개월만에 쓰는 명령어 시간입니다. ln 명령어는 저번에, 하드링크와 심볼릭 링크를 언급했을 때, 언급을 한 적이 있었습니다. [관련글] [리눅스/명령어] - 하드 링크 vs 심볼릭 링크 : 어느 것을 가리키는가? 복습도 다시 한 번 해 보시는 것도 괜찮을 듯 싶네요. 링크에 대해서 조금 더 보는 것도 괜찮고요. -s를 붙이면 윈도우에서 말하는 '바로가기'를, 그렇지 않으면 하드 링크를 생성합니다. 예제를 보겠습니다. 먼저, 파일이 이렇게 있어요. 저는 -i 옵션을 주어서 inode 번호만을 출력을 했습니다. 1.txt의 번호와, 2의 번호가 같아요. 282861로요. 그러면, 1.txt와 2는 같은 파일을 가리키는 것이라고 봐도 무난합니다. alias라고 생각하시면 좋겠습니다. 이것을 그림으로 그리면 ..
리눅스에서 wait와 waitpid는 프로세스의 종료 상태를 리턴해 주는 함수입니다. pid_t waitpid(pid_t pid,int *statloc,int options); 성공을 하면, 프로세스 ID를, 오류가 발생하면 -1을, 그 외의 경우에는 0을 리턴합니다. 그런데, 이 함수가 wait와 다른 점은, 특정한 자식 프로세스를 기다리게 할 수 있다는 것입니다. 일단 위의 두 옵션만 아셔도 무난할 듯 싶어요. 프로세스 그룹은, 추후에 다시 설명해 드리도록 하겠습니다. 3번째 인자의 옵션이 중요한데요. WNOHANG, WCONTINUED, WUNTRACED 등이 있어요. sleep sort를 설명했을 때, 옵션으로 준 것은 이 중 1번째 것이였는데요. 이 때에는 종료된 자식이 존재하지 않아도, 블로킹..
최근댓글