컴퓨터공학/OS2016. 8. 21. 16:27

현재 카테고리 게시물은 Operating System Concepts와 어느 정도의 요약을 통해 올려지는 게시물입니다. 


단지 학습의 용도로만 사용할 뿐! 상업x

Posted by 멜데스

프로그램의 성능 평가에는 프로그램을 실행하는 데 필요한 시간과 공간의 추정치를 분석하는 방법과 컴퓨터가 실제로 프로그램을 실행하는 데 걸리는 시간을 측정하는 방법이 있다. 그러나 성능 측정 방법은 모든 프로그램들을 최선의 경우와 최악의 경우를 모두 실행해 보기에는 역부족이므로 여러 프로그램을 비교하는 데 성능 측정 방법보다는 성능 분석을 사용한다. 성능 분석을 위해서는 공간적인 효율성과 시간적인 효율성이라는 복잡도도 평가한다. 즉 복잡도가 높을수록 효율성은 떨어진다.

 

1. 공간 복잡도

공간 복잡도는 프로그램을 실행시켜 완료하는 데까지 소요되는 총 저장 공간을 의미한다.

공간 복잡도 = 고정 공간 + 가변 공간

 

공간 복잡도는 최악의 경우나 평균의 경우를 고려하여 표현한다.

 

2. 시간 복잡도

시간 복잡도는 프로그램을 실행시켜 완료하는 데까지 걸리는 시간을 의미하며, 컴파일 시간과 실행 시간을 모두 포함한다.

시간 복잡도 = 컴파일 시간 + 실행 시간

 

3. 연산 시간 표기법

'컴퓨터공학 > 자료구조론' 카테고리의 다른 글

1-4. 순환 알고리즘  (0) 2015.12.30
1-2. 자료 추상화  (0) 2015.04.18
1-1. 자료구조와 알고리즘  (0) 2015.04.18
Posted by 멜데스

순환(recursion)이란 정의하려는 개념 자체를 정의 속에 포함하여 사용하는 방법을 의미한다. 순환에는 함수가 직접 자신을 호출하는 직접 순환(direct recursion)과 다른 제3의 함수를 호출하고 그 함수가 다시 자신을 호출하는 간접 순환(indirect recursion)이 있다. 순환 방식은 어떤 복잡한 문제를 간단하게 풀 수 있는 작은 문제로 분할하여 해결하려는 방법인 분할 정복의 특성을 가진 문제에 적합하다.

<예> 팩토리얼 구하기

Procedure factorial(n)

 if n<= 0 then return 1

  else return (n*call factorial(n-1));

end factorial

 

순환 알고리즘의 대표적인 예로 팩토리얼 구하는 문제를 들 수 있다.

'컴퓨터공학 > 자료구조론' 카테고리의 다른 글

1-5. 성능 분석  (0) 2015.12.30
1-2. 자료 추상화  (0) 2015.04.18
1-1. 자료구조와 알고리즘  (0) 2015.04.18
Posted by 멜데스
컴퓨터공학/네트워크2015. 12. 20. 07:46

그러면 실제로 패킷을 보내기 전에 패킷을 보내는 주체인 호스트의 주소 체계에 대하여 알아보자. 호스트는 두 가지 주소를 사용한다. 하나는 IP 주소이며, 하나는 포트 번호. 여기에 추가로 물리 주소가 붙게 되는데, 물리 주소는 말 그대로 하드웨어 장치에 붙어 있어서 변경할 수 없는 주소이다. 그래서 물리 주소를 하드웨어 주소라고도 한다. IP 주소는 얼마든지 변경 할 수 있기 때문에 논리 주소에 해당한다.

물리 주소는 네트워크 인터페이스 카드(NIC - Network Interface Card)가 만들어지면서 자동으로 할당된다. 즉, 제조 회사에서 지정하는 것이다. 그래서 각 네트워크 카드에는 세상에서 하나뿐인 물리 주소를 갖게 되는데, 이것이 가능한 것은 물리주소는 다음과 같이 두 부분으로 되어있기 때문이다.


     XX:XX:XX    : XX:XX:XX

제조회사 고유번호 : 카드 고유번호


X는 16진수를 나타내며 4비트로 되어 있다. 그러니까 제조회사 고유번호로 24비트를, 카드 고유번호로 24비트를 사용하는 것이다. 따라서 물리 주소를 2의 48승 = 281,474,976.......개 가질 수 있다. 자신의 컴퓨터의 물리주소는 Windows 계열에서는 ipconfig /all, Linux에서는 ipconfig 명령으로 알 수 있다. 물론 같은 명령으로 IP 주소도 알 수 있다.

IP 주소는 32비트로 구성되어 있으며, 부르기 쉽고 기억하기 쉽게 하기 위하여 보통 8개씩 끊어서 192.168.0.2 등과 같이 10진수로 표현한다. 물론 이것도 기억하기 힘들지만 그나마 낫다. IP 주소 의미상 두 부분으로 나뉘는데, 네트워크 주소와 호스트 주소로 나뉜다. 네트워크 주소는 라우터(Router)가 목적지 네트워크를 찾는데 사용하고, 호스트 주소는 LAN상에서 목적지 호스트를 찾는 데 사용한다. 그래서 네트워크 주소가 짧을수록, 즉 사용하는 비트 수가 적을수록 그만큼 호스트 주소로 사용되는 비트 수가 많아지며, 따라서 같은 네트워크 안에 더 많은 호스트를 보유할 수 있게 된다. 이렇게 사용하는 호스트 수에 맞추어 IP주소를 편리하게 관리할 수 있도록 미리 네트워크 주소와 호스트 주소를 나누었다. 모두 다섯 클래스로 나누었고 각 클래스의 사용 가능 IP주소를 보여준다.


클래스 

IP 주소 범위 

네트워크 수 

호스트 수 

0.0.0.0~127.255.255.255 

126 

16,777,214 

128.0.0.0~191.255.255.255 

16,384 

65,534 

192.0.0.0~223.255.255.255 

2,097,152 

254 

224.0.0.0~239.255.255.255 

 

 

240.0.0.0~247.255.255.255 

 

 


표에서 A클래스는 그 수가 적은 대신 호스트는 아주 많이 보유할 수 있다. 반대로 C클래스는 호스트를 많이 보유할 수 없지만 대신 많은 네트워크가 존재한다. C클래스는 그래서 중소기업에서 많이 사용한다. D클래스와 E클래스는 특수한 목적(보통 연구를 위한 경우)에 이용하기 때문에 일반적으로는 사용하지 않는다. 그리고 각 네트워크마다 호스트 주소가 모두 0인 경우와 127.x.y.z에 해당하는 주소는 루프백(Loopback)을, 모두 1인 경우에는 브로드캐스트(Broadcast)를 의미하기 때문에 특정 호스트 주소로 사용하지 않는다. 특히, 127.0.0.1은 로컬 호스트(Local Host), 즉 자기 자신을 의미하며 로컬 호스트를 테스트하는 경우에 많이 사용한다. 예를 들어 자신의 컴퓨터에서 텔넷 서비스를 하는데 자신의 컴퓨터로 자신의 컴퓨터에 있는 텔넷 서버에 접속하고자 할 때 127.0.0.1을 사용한다.

IP주소는 다섯 개의 클래스로 구성되어있다고 했는데, 회사의 규모가 작아서 두 세 개의 회사가 하나의 C클래스를 공유하고 있다고 가정한다. 그렇다면 어떻게 네트워크 주소를 판단해야할까? C 클래스 주소 전체를 하나의 네트워크로 판단하기 때문에 내부에서 네트워크를 쪼개야 한다. 이러한 일은 C 클래스에서 뿐만이 아니라 A, B클래스에서도 마찬가지로 접하는 문제다. 이러한 문제를 서브넷(Subnet)이란 방법으로 해결하고 있으며, 서브넷을 구현하기 위하여 서브넷 마스크(Subnet Mask)를 사용한다. 서브넷은 하나의 네트워크를 몇 개의 서브네트워크(SubNetwork)로 나누는 기법이다. 서브넷과는 반대로, 규모가 약간 큰 회사가 있어서 C클래스 여러 개를 IP 주소로 사용한다고 가정하면, 이번에는 C클래스 여러 개를 하나의 네트워크로 사용하고 싶어한다. 이런 경우에는 슈퍼넷(Supernet)으로 해결하며, 슈퍼넷을 지원하기 위하여 CIDR 등이 사용된다.

IP 주소는 운영체제마다 설정하는 방법이 여러 가지이다. 기본적으로 Windows 계열에서는 네트워크 환경 > 등록정보 > 로컬 네트워크 > 등록정보 > 인터넷 프로토콜(TCP/IP)의 조금은 복잡한 과정을 거치면 되며, Linux의 경우에는 netconfig 명령을 이용하여 IP 주소를 설정할 수 있다.

IP 주소를 설정하는 방법은 크게 고정 IP 주소를 설정하는 것과 유동 IP 주소를 설정하는 것의 두 가지로 나뉜다. 고정 IP 주소를 설정하는 것은 네트워크 관리자에게서 할당 받은 IP 주소를 IP 주소란에 적기만 하면 된다. 이때, 게이트웨이 주소와 DNS 주소, 서브넷 마스크는 꼭 기록해야 한다. 그렇지 않으면 위에서 언급한 내용을 인식하지 못한다. 유동 IP 주소를 설정하는 방법은 더욱 간단하다. 그냥 DHCP(Dynamic Host Configuration Protocol)를 사용한다고 체크하기만 하면 된다. DHCP는 동적으로 IP 주소를 부여하고 주어진 시간이 지나면 IP 주소의 사용 시간을 연장 또는 IP 주소의 사용을 만료시키는 등 IP 주소 할당 및 해제에 관한 일을 도와주는 프로토콜이다. DHCP를 이용하는 장점으로는 적은 수의 IP 주소를 가지로 보유하고 있는 IP 주소의 수보다 더 많은 수의 호스트를 커버할 수 있다는 점이다. 물론 모든 호스트가 네트워크를 사용하고 있다면 할 수 없지만, 그렇지 않은 환경에서는 DHCP를 이용하여 효율적으로 IP를 활용할 수 있다. 그래서 인터넷 서비스를 하는 회사에서 DHCP를 많이 사용한다. ADSL, VDSL, 케이블 모뎀 등을 사용할 때 통신회사로 부터 DHCP를 사용하라는 이야기를 들었을 것이다.

마지막으로 포트번호에 대한 이야기이다. 포트번호는 애플리케이션이 사용하는 일종의 주소라고 했는데 전화번호 113, 114, 119같이 포트번호 중에도 특별한 용도를 부여한 번호가 있는데, 이러한 번호를 Well-Known number(잘 알려진 번호)라고 하며 1~1024번까지 할당되어 있다. 따라서 사용자가 개인적으로 포트번호를 사용하고자 한다면 1024 이후의 번호를 사용하여야 한다. 대표적인 포트번호와 그 용도는 밑에 표를 보자.

7    echo

13   daytime

20   FTP, data

21   FTP, control

23   telnet

53   DNS

80   HTTP

137  NetBIOS Name Service

138  NetBIOS Datagram Service

139  NetBIOS Session Service

따라서 웹 서비스를 받기 위해서는 80번 포트를, FTP 서비스를 받기 위해서는 21번으로 접속하면 자동으로 포트번호에 해당하는 애플리케이션으로 패킷이 전송된다.

'컴퓨터공학 > 네트워크' 카테고리의 다른 글

2. TCP/IP는 메시지를 쪼개고  (0) 2015.12.08
1. 프로그램이 메시지를 만들고  (0) 2015.12.08
Posted by 멜데스

프로그램이 여러가지 방법을 통하여 메시지를 만들어 TCP/IP가 있는 이곳으로 보낸다. 여기서는 프로그램이 보낸 메시지를 조그만 덩어리로 쪼갠다. 그런 다음 다시 여러가지 정보를 붙이게 된다. 

이렇게 만들어진 데이터 덩어리를 패킷(Packet)이라고 한다.


패킷 : 네트워크상에서 전송되는 데이터의 단위를 말한다. 이 패킷에는 애플리케이션이 보내는 진짜 데이터에 각 계층에서 필요한 정보가 헤더(header)형태로 붙어있다. 그래서 수신측에는 패킷에 붙어있는 헤더 정보를 보고 패킷의 용도를 파악하게 된다.


TCP/IP는 TCP와 IP를 합쳐서 부르는 말.

TCP 프로토콜이 하는 일 중에서 가장 중요한 것이 두 호스트 간의 연결(Connection)을 맺고, 유지하고, 끊는 것이다.


실제로 컴퓨터 네트워크 환경은 패킷 교환 망(Packet-Switched Network)이 대부분이기 때문에 회선 교환 망(Circuit-Switched Network)을 사용하는 전화하고는 연결의 개념이 전혀 다르다. 전화의 경우, 회선 교환 망 방식을 사용하기 때문에, 먼저 두 전화기 간의 선을 연결하고서 말을 주고 받는다. 즉, 먼저 선로를 확보한 다음에 데이터를 주고 받는 것. 그렇기 때문에 전화를 하는 동안은 누군가가 먼저 끊기 전에는 계속 연결된 상태로 있는다. 

그러나 패킷 교환 망 같은 경우 두 호스트 사이의 선로를 확보하지 않는다. 그 대신 송신측 호스트가 수신측으로 데이터를 보내면 그것으로 끝이다. 물론 중간 중간에 수신측 호스트를 확인하고 보내긴 하지만 기본적으로는 송신측에서 보낸 데이터가 수신측 호스트에 제대로 도착할지는 아무도 보장 못한다. 하지만 이렇게 해서는 호스트 간에 서로 연결되었다고 볼 수가 없다. 그렇기 때문에 두 호스트 간에 서로 연결되었다는 것을 보장하기 위하여 TCP가 일을 하는 것이다.

그래서 TCP를 연결 지향 프로토콜(Connection-Oriented Protocol)이라고 한다.

TCP는 두 호스트를 연결하기 위하여 제일 먼저 수신측 호스트와 연결을 시도한다. 연결을 시도하는 과정은 세 단계로 구성이 되는데, 이러한 이유로 인하여 TCP가 연결을 맺는 과정을 Three-way Handshaking이라고 한다.

Three-way Handshaking

송신측->수신측 : 통신을 하려고 하니 ##번 포트로 응답해 주세요.

수신측->송신측 : 알겠습니다. 준비가 되었으니 이 메시지에 대한 응답을 해 주세요.

송신측->수신측 : 확인했습니다. 그럼 이제 통신을 시작합니다.


이렇게 연결된 후에는 계속 연결되었다는 것을 확인하기 위하여 모든 패킷에 일련번호(Sequence number)와 타임스탬프(Time Stamp)를 같이 실어 보낸다. 그리고 받은 패킷에 대해서도 확인 메시지를 담은 패킷을 보낸다. 이렇게 제대로 패킷을 받았다는 의미로 사용되는 패킷을 응답(Acknowledgement)패킷이라고 한다. 이 패킷을 받은 호스트는 패킷이 제대로 전송이 되었다고 생각한다. 응답 패킷을 받지 못한 경우에는 패킷을 받지 못했으니 다시 전송하라고 요청한다.

응답 패킷을 보통 ACK라고 부른다. ex) "ACK 받았음?", "ACK가 안오는데?", "ㅇㅇ ACK받음"

이런식으로 응답패킷을 이야기한다.


전송 계층에 있는 프로토콜 중에 UDP(User Datagram Protocol)라는 것도 있다. UDP는 TCP와 달리 비연결성(Connection) 프로토콜이다. 그렇기 때문에 TCP처러머 연결을 유지하기 위해서 많은 정보를 나눌 필요가 없으며, 따라서 패킷에 달라붙은 정보도 TCP보다 훨씬 적다. UDP는 패킷 교환망과 잘 어울린다.


이렇게 전송계층에서 많은 일을 겪은 패킷은 OSI 모델의 네트워크 계층, DoD 모델의 인터넷 계층으로 내려오게 되는데, 여기서는 IP주소에 해당하는 물리 주소를 조사하고 확인이 되면 최종적으로 패킷에 물리 주소를 붙여서 다음 계층으로 보내준다.

Posted by 멜데스

다른 컴퓨터로 데이터를 전송하기 위해서 제일 먼저하는 일

1. 데이터를 전송하는 프로그램이 보낼 데이터를 만드는 것

OSI 모델(일반적인 네트워크 통신 모델)에서 어플리케이션 계층(응용 계층)

DoD 모델(TCP/IP 프로토콜이 사용하는 모델)에서도 어플리케이션 계층(응용 계층)


프로그램은 데이터를 보내기 위하여 보낼 곳, 즉 수신측의 주소를 알아야 한다.


일반적으로 네트워크상에서 주소는 크게 두 가지의 정보로 구성

IP주소 (IP Address)

포트 넘버 (Port Number)


IP주소는 수신측 호스트가 갖는 유일한 주소

포트넘버는 수신측 호스트에서 동작하는 애플리케이션이 서비스하기 위하여 기다리는 일종의 주소


애플리케이션은 자신이 서비스할 주소를 포트번호라는 형태로 등록해 놓으면 송신측 호스트의 애플리케이션은 수신측의 IP 주소와 보내고자 하는 애플리케이션이 열어놓은 포트번호로 메시지를 보내게 된다.


보내는 쪽의 호스트 역시 자신의 정보를 알려주어야 수신측 호스트가 나중에 자신에게 응답을 할 수 있게 된다. 그래서 메시지에 송신측의 주소 정보, 즉 IP주소, 포트번호를 메시지에 싣게 되는데, 실제로 이러한 정보를 싣는 것은 애플리케이션 계층이 아니라 더 하위 계층에서 이루어 진다. 애플리케이션은 단순히 자신의 주소 정보를 하위 계층에 알려줄 뿐.

호스트(Host)는 IP주소를 갖고 있는 장치를 일컫는다. 대표적인것이 컴퓨터, 프린터 등이 있다.


애플리케이션 계층에서는 메시지를 보내는 데 별다른 어려움이 없다. 단순히 보내고자 하는 메시지를 다음 단계로 넘겨주기만 하면 되기 때문이다. 하지만 메시지를 있는 그대로 보내지 않는 경우에는 보통 메시지를 변형하게 되는데, 가장 많이 사용하는 것들이 인코딩, 압축, 암호화이다. OSI모델에서는 이러한 일을 하는 계층을 프리젠테이션 계층(Presentation Layer)라고 한다. 

프리젠테이션 계층을 통과한 메시지는 세션 계층(Session layer)을 통과하게 되는데, 세션계층에서는 메시지의 정당성을 보장한다. 그래서 보내는 메시지가 손상되지 않고 제대로 전송이 되었는지 수신측에서 확인할 수 있는 정보 또는 이 메시지는 어떠한 세션(연결)의 메시지인가에 대한 정보가 추가로 붙는다.


DoD 모델의 애플리케이션 계층은 OSI 모델의 애플리케이션, 프리젠테이션, 세션 계층을 모두 포함하고 있다. 쉽게 말하여 프로그램이 지금까지 이야기한 모든 일을 처리한다는 것.

프로토콜 : 두 컴퓨터 간에 어떻게 통신을 하는가에 대한 여러 가지 규칙들을 모아놓은 것.

'컴퓨터공학 > 네트워크' 카테고리의 다른 글

3. 여기서 잠깐 주소 이야기를 먼저  (0) 2015.12.20
2. TCP/IP는 메시지를 쪼개고  (0) 2015.12.08
Posted by 멜데스

자료추상화

데이터타입 : 데이터의 집합과 연산의 집합을 의미, 추상화는 필수적이고 중요한 속성만 골라서 일반화시키는 과정

추상 데이터 타입(ADT ; Abstract Data Type)은 데이터 타입의 논리적인 정의이며, 데이터가 무엇이고 각 연산은 무슨 기능을 수행하는가만을 정의한다. 또한 데이터의 구조 및 연산의 구현방법은 포함시키지 않는다. 추상 데이터 타입에는 객체와 연산을 정의한다.

추상화 작업은 연산자에 대한 추상화 작업과 데이터에 대한 추상화로 구분한다.

객체 지향 프로그래밍에서는 특히 연산자에 대한 추상화보다 데이터에 대한 추상화가 더욱 중요한 개념이다.

자료와 연산에 있어서 추상화와 구체화의 관계이다.


구분 

자료 

연산 

추상화 

추상 자료형 

알고리즘 

구체화 

자료형 

프로그램 


'컴퓨터공학 > 자료구조론' 카테고리의 다른 글

1-5. 성능 분석  (0) 2015.12.30
1-4. 순환 알고리즘  (0) 2015.12.30
1-1. 자료구조와 알고리즘  (0) 2015.04.18
Posted by 멜데스
1. 자료와 정보

자료(Data)는 현실세계로부터 관찰이나 측정을 통해서 수집된 사실 혹은 값

자료형태는 숫자로 표현되는 수치값이나 문자들로 구성되는 스트링(string)을 포함


정보는 어떤 상황에 대한 적절한 의사결정을 할 수 있게 하는 데이터의 유효한 해석이나 상호관계

자료가 의도된 프로그램에 따라 처리되어 발생하는 결과


2. 자료구조

자료구조는 자료 사이에 존재하는 관계를 개념적으로 정의한 것, 자료를 효율적으로 이용할 수 있도록 자료의 특성에 따라 분류하여 구성하고 저장 및 처리하는 모든 작업.

자료구조를 기억 공간 내에 실현 하는 방법

1. 기억 공간 내에 앞에서부터 차례로 데이터를 기억시키는 방법

2. 자료 사이의 관계가 기억 공간 내의 위치와 독립하여 포인터에 의한 접속으로 얻게 되는 방법


선형 구조 : 데이터를 저장할 때 연속적인 기억 공간에 배정하는 자료구조

ex) 배열, 스택, 큐, 데크, 연결리스트

비선형 구조 : 기억 공간 내의 위치와 별개로 독립하여 저장하는 구조

ex) 트리, 그래프


* 자료구조의 형태에 따른 분류

단순구조 : 정수, 실수, 문자, 문자열 등의 기본 자료형

선형구조 : 순서리스트, 연결리스트, 스택, 큐, 데크

비선형구조 : 트리, 그래프

파일구조 : 순차파일, 색인파일, 직접파일


주어진 데이터를 처리하는데 적절한 데이터 구조를 선택하기 위한 요인

1. 데이터의 양

2. 데이터를 사용하는 방법과 횟수

3. 데이터의 정적 또는 동적인 특성,

4. 데이터 구조에 의해 요구되는 기억장치의 양


3. 알고리즘

알고리즘은 특정한 일을 수행하는 명령어들의 유한집합이며 주어진 문제를 해결하기 위한 수행과정을 논리적으로 표현한 것


입력 : 외부로부터의 자료 입력이 0개 이상 있어야 한다.

출력 : 최소 1가지 이상의 출력이 있어야 한다.

명확성 : 각 명령들은 명확하고 모호하지 않아야 한다.

유한성 : 알고리즘의 명령대로 수행하면 어떤 경우에도 한정된 수의 단계 뒤에는 반드시 종료해야 한다.

유효성 : 알고리즘을 구성하는 명령문들은 하드웨어에서 실행 가능해야 한다.


알고리즘을 선정하는 조건

1. 어떠한 특정 언어의 특성을 고려하지 않고 작성할 수 있어야 한다는 것

2. 문제를 해결하려 할 때 기존 기법을 사용하고 의존할 수 있어야 한다는 것



'컴퓨터공학 > 자료구조론' 카테고리의 다른 글

1-5. 성능 분석  (0) 2015.12.30
1-4. 순환 알고리즘  (0) 2015.12.30
1-2. 자료 추상화  (0) 2015.04.18
Posted by 멜데스