※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)


Internet Protocol이라는 것은 현대의 인터넷이라는 개념을 놓고 봤을 때 굉장히 중요한 역할을 차지한다. 애초에 이전의 포스팅에서 말했듯이(http://operatingsystems.tistory.com/entry/NW-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EB%9E%80) 현대 인터넷의 시초는 미국 국방부 네트워크인 ARPANET이다. 그 때의 ARPANET은 지금으로 따지면 어느 회사의 Local Network 정도로 이해하면 된다. 그러니까 그 국방부 내에서만 사용하던 네트워크였을 뿐이다. 이전의 포스팅에서 이야기했던 이야기 중 하나가 "하나의 LAN에서는 IP가 없이도 통신이 된다"였고 그것을 Network Simulator같은 프로그램으로 확인하여 스크린 샷도 올려놓았다.(http://operatingsystems.tistory.com/entry/NW-Address-Resolution-Protocol-ARP)


자 이제 IP라는 것이 왜 필요한 지부터 이야기해보자. 아까도 말했듯이 LAN에서는 MAC address만으로도 통신이 가능하다. MAC address는 100% 고유한 주소이다. IP는 설정하는 것에 따라 IP 주소를 바꿀 수도 있고, 나중에 배우겠지만 사설IP 대역을 사용하면 IP가 같아도 통신이 가능하다. (물론 엄밀히 말하면 다른 IP이지만) IP 주소와 MAC 주소를 비교해봤을 때 개개의 PC를 구별할 수 있는 능력은 MAC 주소가 훨씬 좋다. 당연하다. 이 세상의 MAC 주소는 절대 같을 수가 없고 변할 수도 없기 때문이다. 그런데 왜 굳이 개개의 PC를 구별할 수 있는 능력이 적은 IP를 만들어서 쓰느냐? 그 이야기를 지금부터 해보려고 한다.


LAN이 하나하나 연결되면서 지금의 글로벌한 인터넷이 되었다는 사실은 여러 번 언급했다. 이 때 LAN을 연결하는 장비, 즉 서로 다른 네트워크를 연결하는 장비를 라우터라고 한다. 자 이제 어느 정도 설명이 가능할 것 같다. 아래의 그림을 보자.



(라우팅 설정을 하지 않아서 빨갛게 나온다. 양해바란다.)

저런 망이 엄청나게 많이 연결되어있는 것이 현재의 인터넷이다. 자 생각해보자 위의 그림에서 PC-PT PC2가 다른 네트워크에 있는 PC와 연결하려면 기본적으로 라우터를 거쳐서 가야한다. 즉 라우터 없이 스위치와 PC처럼 direct communication은 불가능하다. MAC 주소를 사용하여 다른 네트워크로 건너가지 못 하는 이유가 여기에 있다. MAC header를 보면 출발지와 도착지 필드가 있다. 출발지는 나의 MAC주소를 쓰면 된다. 도착지에 뭐라고 쓸꺼냐? 이것이 문제인것이다. 라우터의 MAC을 쓰면 내가 통신하는 대상이 MAC이 되어버리고 실제로 통신을 하고자 하는 건너편 네트워크에 속한 PC의 MAC은 서로 다른 대역에 존재하기 때문에 얻어올 수도 없을 뿐더러 설령 얻어올 수 있다고 하더라도 지금 현재 나의 PC가 연결되어있는 스위치가 direct로 연결되어있지 않기 때문에(다른 LAN에 존재하기 때문에) 해당 PC와 통신할 수 없다. 그래서 가상으로 주소를 하나 더 만든 것이다. 그것이 IP이다.


여기서 중요한 말은 가상으로 주소를 하나 더 만들었다는 개념이다. 이 문장이 의미하는 것은 꽤나 깊다. 위에서도 어느 정도 다 설명한 이야기이지만, 

1. 가상으로 주소를 하나 더 만들었다는 것은 굳이 이 주소가 없어도 어느 정도는(LAN에서는) 통신이 가능하다는 것을 의미하고 

2. 가상으로 만든 주소라는 말은 소프트웨어적으로 구현된 주소라는 것을 의미한다. 


이제 왜 IP 계층이라는 것이 필요한지 그리고 왜 IP 주소가 필요한지를 알게되었다.


이제 IP 계층의 역할에 대해서 이야기해보자. 계속 이야기하지만, IP 계층은 서로 다른 네트워크에 있는 PC끼리 패킷을 주고 받을 수 있도록 해주는 계층이다. 이 때 고려해야할 사항이 몇 가지 있다.

1. 누구한테?

2. 어떻게?


1. 누구한테?

누구한테 보낼 것이냐? IP 주소의 역할을 한번 더 되세겨보자. 목적지 IP 주소에게 보낼 것이라는 뜻이다. 이 주소는 IP라는 소프트웨어에서 만들어준 (컴퓨터를 분별하는) 가상의 주소이다.


2. 어떻게?

어떤 루트를 통해 패킷을 전달할 것인지를 의미한다. 우리가 말하는 인터넷은 수많은 라우터로 이루어져있다. A라는 PC에서 B라는 서버로 갈 때 어떤 라우터들을 거쳐서 갈 것인지를 논의하는 것이다.


IP에 대한 개관적인 이야기를 했다. 처음부터 너무 자세하게 나가면 글을 쓰고 있는 나도 방향을 까먹을 것 같아서 큰 그림을 너무 지나치게 계속 이야기했던 것 같다. 다음 포스팅에서는 조금 더 자세하게 IP를 들여다보자.

'Computer Networks' 카테고리의 다른 글

[NW] IP header  (5) 2013.07.30
[NW] Internet Protocol in detail  (0) 2013.07.28
[NW] Internet Protocol  (0) 2013.07.26
[NW] Use of ARP  (0) 2013.06.21
[NW] Packet structure  (0) 2013.06.16
[NW] Address Resolution Protocol (ARP)  (2) 2013.06.13
Posted by 빛나유

댓글을 달아 주세요

※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)


어쩌면 나 혼자 쇼하는 것일지도 모르지만, 난 적어도 내 블로그를 원해서 찾아오는 분이 3명정도는 있지 않을까? 싶다. 그 분들께 우선 지금까지 죄송하다는 말을 드리고 싶다. 한 달 가량 포스팅을 쉬었다. 쉬고 싶어서 쉰 것은 아니다. 핑계를 대자면...


1. UDP를 Maybe에서 공부하고 있는데 갑자기 UDP 커널을 파해쳐보자는 이야기가 나왔고 그에 걸맞는 레퍼런스까지 갖춰져있더라. 그래서 1주동안 커널 공부를 했는데.. 얻은게 없다.-_- 그냥 시간 때우기였다.(물론 훗날 그나마 도움이 될거라고 생각한다.) 얻은게 없었으니 포스팅도 못 하고... 그렇게 1주일이 갔고...


2. 그렇게 1주일이 지나니까 정보처리기사 실기 시험이 2주 앞으로 다가왔다. 저번에 얏잡아보고 봤다가 시험출제자님이 정확히 내가 공부 안 한 부분만 골라서 내셔서(헤헤;;) 떨어졌는데, 이 공부는 죽었다 깨어나도 다시 하기 싫어서 2주동안 빡시게 했다. 다행히 붙었다. 이렇게 2주가 갔고


3. 그리고나서 Maybe에서 "UDP 커널은 나중에 공부하자. 지금은 너무 어렵다."는 이야기가 나와서 1주동안 지금까지 해왔던 데로 기존의 방식대로 스터디를 했다. 그 스터디를 어제 했다. (우리는 스터디를 했는가 초밥을 먹었는가?)


이렇게 4주를 낭비?아닌 낭비를 했다. 


이전에도 말했을 것이다. 포스팅이 늦을 수도 있다고... (앞으로는 공지라도 해야겠다.) 이 블로그/스터디는 꽤나 나에게 많은 부분을 차지하는 것 같기도 하다. 왠만하면 꾸준히 포스팅이 될 터이니 그렇게 믿어주시길 바라고 바란다. 


아무튼 Maybe!! 다시 시작이다. 다음 포스팅은 IP에 대해서 이야기해보려고 한다.


p.s. 정기적으로 구독하는 사람이 없다면 난 지금까지 뭘 쓴거지?

Posted by 빛나유

댓글을 달아 주세요

※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)


시스템 프로그래밍 부분에 보면 4~5개에 걸쳐서 Virtual Memory를 설명해놓았다. 이번에는 그 때 설명한 Virtual Memory를 실제로 어떤 식으로 OS에서 관리되고 있는지 확인해보자.

한 가지만 확실히 해두고 설명을 해보려고 한다. 아무리 Virtual Memory가 존재한다 할지라도 반드시 실행하려는 코드는 Physical Memory에 있어야 한다는 어쩌면 원론적이면서도 까먹기 쉬운? 개념이다. 이 말인즉 어떤 코드가 실행되려면 항상 그 코드는 Physical Memory에 있어야 한다는 이야기이다. 반대로 말해보자. 하나의 프로그램에서 실행되지 않아도 되는 코드는 굳이 Physical Memory에 있을 필요가 없다는 뜻도 된다.

위의 내용은 이전의 시스템 프로그래밍 부분에서 포스팅해둔 부분을 잘 읽어봤다면 쉽게 이해할 수 있는 그렇지만 매우 중요한 개념이다. 이 때 간과한 내용이 있는데, 비록 Physical Memory에는 모든 프로그램의 코드가 올라가 있을 필요가 없지만 적어도 Virtual Memory에는 모든 프로그램 코드가 올라가 있어야 한다는 사실이다. 이 사실을 머릿 속에 집어넣고 공부를 다시 해보자.

이번 포스팅에서는 Virtual Memory를 구현하는 방법에 대해서 설명하려고 한다. 가장 대표적인 기법을 설명하려고 한다. 바로 Demand Paging이다. 우선 이 개념을 설명하기 전에 잡고 갈 개념이 바로 Page이다. Page란 무엇인가? Virtual Memory가 일정 크기로 나눠지면 그 하나 하나를 우리는 Page라고 한다. Physical Memory가 일정 크키로 나눠진 하나 하나는 뭐라고 부를까? 정확히 말하면 Page Frame이라고 하고 보통 Frame이라고 불리우나 많은 사람들이 그냥 Page라고 명칭한다. 나는 내 블로그에 포스팅을 할 때 다른 사람들처럼 혼동되게 하기 싫기 때문에 정확한 명칭을 사용하여 블로깅을 하도록 하겠다.


Page와 Frame의 개념을 알았으면 이제 Demand Paging의 개념을 공부해보자. Demand!! 요구하다 라는 뜻이다. Page를 요구하는 것이다. 왜 요구를 하느냐? 프로그램을 실행할꺼니까 요구를 한다. 가령 이와 같은 프로그램을 생각해보자. 4개 중에 하나의 경우만 실행하고 종료하는 프로그램이라고 가정해보자. 이 프로그램을 사용하는 모든 사람들은 4개 중에 하나만 사용하고 끝낼꺼다. 그런데 굳이 전체 프로그램을 Main Memory에 로딩시킬 필요가 있을까? 그렇지 않다. 필요한(요구하는) 하나만 Main Memory에 올리면 된다. (그렇지만 여기서도 기억하자. Virtual Memory에는 전체의 프로그램이 올라가 있어야 한다는 것이다.) 아래의 그림을 보자.



4개의 옵션을 선택하여 실행하고 종료하는 프로그램이라고 가정하자. Virtual Memory에는 모든 프로그램이 전부 로딩되어있다. (이 프로그램의 Virtual Memory의 Page는 A부터 F까지라고 하자.) 이 중 A와 B는 항상 실행되어야 하는 루틴이라고 치고 C, D, E, F가 각각 선택될 4개의 루틴이라고 하자. Main Memory에 로딩되어있는 것을 보니 D만 로딩되어있다. D를 선택했다는 것이다. Demand Paging 기법은 이와 같이 원하는 페이지만 로딩시키는 기법이다. 


갑자기 Page Table이라는 것이 나와서 당황했을 것이다. 잠깐만 설명하고 넘어가자. Virtual Memory에 있는 page가 Main Memory의 Frame으로 변환되려면 page table이 필요하다. A번 Page는 2번으로 mapping 되어있으니까 Page Table에는 2와 A를 한 칸에 놓고 Valid-Invalid bit을 V로 세팅한다. Valid-Invalid Bit은 다음과 같이 세팅된다.


Valid(V) : Virtual Memory의 Page가 Main Memory의 Frame에 존재하고 legal할 때

Invalid(I) : Virtual Memory의 Page가 Main Memory의 Frame에 존재하지 않거나 legal하지 않을 때


페이지 테이블에 관한 이야기는 이 정도로 하자. 다음에 더욱 자세하게 이야기 할 생각이다.


다시 Demand Paging 본론으로 돌아오자. 그래!! 원하는 페이지만 메모리에 로딩해서 사용한다고 하자. 그러면 일단 멀티프로그래밍 수치가 좋아지겠네? 그리고 메모리를 이전보다 훨씬 효율적으로 사용할 수 있겠네? 그런데도 메모리가 꽉 찰 확률은 존재한다. 아래의 그램을 보자.



이와 같이 프로세스 3개를 썼는데 Main Memory가 꽉 차버린 상태에 이르렀다고 해보자. 이 때 새로운 프로세스의 A라는 페이지라 요청이 되었으면 어떤 일이 벌어질까? 이 때 Page Fault가 일어난다. 요청하는 페이지가 메모리에 없는 상황이다. Page Fault는 Memory가 꽉 찬 상황에서만 일어나는 것이 아니다. 꽉 차지 않은 상황이라도 요청하는 페이지가 메모리에 없으면 Page Fault가 생기는 것이다. Main Memory가 꽉 차지 않은 상태에서 Page Fault가 발생하면 아무것도 없는 Free Frame을 하나 선택하여 그 Frame에 Page를 집어넣는다.



새로운 프로세스인 banana.exe1번 Frame에 자신의 페이지 B를 넣으려고 한다. 그런데 Main Memory의 Frame 1을 보면 Apple.exe의 페이지 B가 떡 하니 차지하고 있다. 이럴 때 사용하는 것이 Page Replacement Algorithm이다. Main Memory 1~11까지의 프레임 중 하나를 골라서 Banana.exe의 페이지 B와 교체하는 것이다. 


여기서 잠깐, Page Replacement Algorithm에서 가장 대표적인 것은 LRU 정도가 되겠다. Least Recently Used의 약자로 최근에 가장 적게 사용된 페이지를 골라서 교체하는 것이 메모리 효율상 좋다고 생각하고 만들어낸 알고리즘이다. 이 알고리즘에 대한 설명은 나중에 하기로 하자.


Page Replacement가 진행된 후에 어떤 모습이 되는지 알아보자.



그림이 조금 작아졌으나 정성껏 그린 그림이니 잘 봐주길 바란다. 위의 그림에서는 임의로 Orange.exe 프로세스의 Page A를 교체한다고 가정했다. 빨간 네모 쳐진 부분이 변경된 부분이다. 주의할 것은 Orange.exe의 page table을 보라. 이전에는 Frame 5와 Page A가 mapping 되어있었는데 Page Replacement 후에는 그 내용이 Update되었다. 


[Reference : Operating Systems Concept_Steps in handling a page fault]


지금까지 잘 이해했다면 위의 그림을 이해할 수 있어야 한다. Page Fault가 일어났을 때 전체적으로 어떤 작업이 일어나는 것인지 설명하는 그림이다. 추가적으로 조금 설명할 부분이 있다면 4번에서 bring in missing page를 보면 missing page를 free frame에 저장하는데 만일 free frame이 없다면 위에서 설명했던 Page Replacement Algorithm이 사용되는 것이고, 마지막에 instruction을 재시작해주는 과정도 필요하다. 


이것이 바로 Demand Paging 기법이다. 다음 포스팅에서는 Page Table에 대한 이야기 혹은 Least Recently Used Page Replacement Algorithm 기법에 대해서 설명할 예정이다. 어떤 걸 할지는 내 맘이지롱

'Operating Systems' 카테고리의 다른 글

[OS] Memory Management Scheme  (8) 2013.06.30
[OS] File System (Protection)  (1) 2013.05.18
[OS] File System  (0) 2013.05.18
[OS] File System  (4) 2013.05.17
[OS] Deadlock Detection  (2) 2013.02.03
[OS] Deadlock Avoidance (Banker's Algorithm)  (5) 2013.02.03
Posted by 빛나유

댓글을 달아 주세요

    • 빛나유 2013.07.28 02:02 신고  댓글주소  수정/삭제

      안녕하세요~!! 보잘 것 없는 블로그이지만 많이 들어와서 보고 가세요!! 틀리다고 생각하시는 부분이 있다면 언제든지 말씀해주세요~!!

  1. os관심많은학생 2013.12.04 20:50  댓글주소  수정/삭제  댓글쓰기

    OS포스트가 많아서 보고갑니다.
    혹시 OS관련 추천도서 좀 알려주실 수 있을까요?
    해외도서도 괜찮습니다

    • 빛나유 2013.12.05 16:10 신고  댓글주소  수정/삭제

      안녕하세요!!! OS 관심있으시면 자주 들어와서 참고하세요ㅋㅋㅋ
      제가 공부했던 책은.. 공룡책이라고 불리는 가장 유명한...
      Operating System concepts입니다!! 이 책 좋아요!!ㅋㅋ
      그리고 computer systems a programmer's perspective 라는 책도 있는데 이 책은 OS 책은 아니고 시스템 프로그래밍 책이에요. 이 책 증말 좋습니다!! 잘 보시고 공부 열심히 하세요~~~

  2. os관심많은학생 2013.12.08 22:35  댓글주소  수정/삭제  댓글쓰기

    감사합니다~^^ 자주들어와서 배우고가겠습니다 ㅎ

  3. fabianus.c 2016.03.15 22:44  댓글주소  수정/삭제  댓글쓰기

    정말 잘보고 갑니다~ 설명을 매우 찰지게(?) 해놓으셨네요.
    단순히 책만 보고 익혔던 때와는 다른느낌이..
    몇번 더 정독하도록 하겠습니다. 정말 감사합니다~

  4. Laplace 2016.12.23 16:51  댓글주소  수정/삭제  댓글쓰기

    OS에 대해서 공부하려고 찾아보다가 정말 많은 도움 얻고 갑니다. OS 뿐만 아니라 다른 포스트들도 많이 있는데 꾸준히 와서 많이 도움 받고 갈게요!! (- - ) (_ _ )

  5. 쓰레기통 주인 2018.06.05 05:32 신고  댓글주소  수정/삭제  댓글쓰기

    블로그에 정말 도움되는 내용들이 많네요! 이렇게 한 챕터당 공부하시고 정리해서 포스팅하시는데 시간이 얼마나 걸리시나요?