유저레벨, 커널레벨

Posted 2012. 10. 17. 15:57

과거나 지금이나 컴퓨터 보안 또는 시스템 보호에 대해서 많은 논의가 되고 있다.

미숙한 사용자가 중요한 파일을 삭제한다던데 의로적인 악성코드로 인해 시스템이 멈추어 버린다던지

이런 위험요소에서 시스템을 보호하는 것은 매우 중요한 일이다.


인텔은 80286프로세서를 디자인 할때 시스템 보호에 대해 만은 고민을 해 왔으며

이들 중 가장 효과정인 방법으로 마이크로프로세서 내의 MMU( Memory Management Unit )에서의

보호 매커니즘을 생각하게 되었다.


App code  :   PL 3            :: Aookications

PL 2                                :: Operation System Service

PL 1                                :: Operation System Service

OS Code : PL 0                :: Operation System Kernel


PL 3 에서 PL 0 으론 특별한 방법에 의해 접근 가능하다.


이방법은 어떠한 프로그램이든 메모리에 있는 코드 내용에 의해 실행이 되어지며 이러한 메모리에 대해

어떠한 명령어가 참조하고자 할 때 그 명령을 실행하는 코드 메모리와 접근하는 메모리의 권한을 체크하여 프로세서 차원에서의 보호가 가능하게 하는것으로 인텔에서는 이러한 것을

멀티링 이라는 형태로 디자인 하였다.


보호 규정

1. 특권 수준이낮은 코드 세그먼트가 특권 수준이 높은 데이터 세그먼트로 엑세스 하는 것은 불가능하다

2. 특권 수준이 낮은 코드 세그먼트에서 특권 수준이 높은 코드 세그먼트로의 제어 이행은 특별한

방법을 사용해서만 가능하다

3. 특권 수준이 높은 코드세그먼트에서 특권 수준이 낮은 코드 세그먼트로의 제어 이행이 불가능하다.


커널모드를 Ring0 이라 하고, 유저모드를 Ring3 이라 한다.


인텔 마이크로프로세서으 ㅣ세그먼트 디스크립터에는 그 디스크립터가 가지는 특권 권한값을

나타내는 DPL 필드를 가지고 있다. 현재 실행중에 있는 코드 세그먼트 디스크립터가 가지는

DPL값을 우리는 CPL이라 부르며( Current Privilege Level ) 이 값이 바로 현재 실행되고 있는

코드의 권한이 된다.


당연히 낮은 권한으로 높은 권한으로의 접근은 불가능 하다.

메모리관리기법

Posted 2012. 10. 17. 15:53

모든 프로그램이 메모리에 올라와서 사용하게 된다. 이런 메모리르 확장 시켜줄 수 있는

기법이 가상 메모리 (virtual memory )기법 이고 현대 운영체재 시스템에

가장 핵심이 되는 기술이다. 이 가상 메모리를 가능하게 하는 기술로

페이징. 세그먼트, 병합 기법이 있다.



1. 페이징 기법

페이징은 하나의 프로그램을 각각의 페이지 프레임(4KB)로 나누고 이를 메모리에 올려서 사용하는

방식이다. 이떄 가상의 주소로 작성되어있는 각 페이지 프레임은 페이지 테이블에 의해 실제 주소로

매핑되게 된다. 이렇게 함으로써 페이지 테이블을 처리해야 하는 일이생기고 메모리 낭비

효과도 가져온다.

만약 프로세스 하나가 지시 할 수 있는 메모리가 4GB까지 되고(32bit) 페이지 테이블에 존재하는

매핑 페이지 프레인 정보를 나타내는 데 4byte의 크기를 가진 가상 메모리를  구성하면

페이지 테이블 크기는 얼마나 될까..

단순히 1048576 x 4 byte 하면 그 크기는 4MByte가 된다. 그럼 이 시스템에서 3개의 프로세서가

실행되고 있다면 얼마나 될까.. 이는 4MByte x 3 하면 12MByte가 되며 단순히 메모리의 매핑 정보를

나타내는 데 이 큰 용량이 낭비된다는 의미이며 프로세서가 100개, 200개 늘어나면 그 크기는 엄청나다.

인텔 80x86계열에서 제공하는 메모리 매니저 유닛은 이와 같은 낭비를 줄이기 위해 가상 메모리

주소에서 위 페이지 테이블 인덱스 부분을 다음과 같이 페이지 디펙토리 인덱스와 페이지 테이블

인덱스 두 부분으로 나누어 페이지 디렉토리 부분에 해당하는 목록만 메모리에 올려놓고

페이지 테이블에 대해서는 필요시에만 만들어 메모리에 올려놓음으로써 낭비를 줄이고 있다.


페이징 기법에 의하여 메모리가 엑세스 되어진다면 매번 메모리를 차조할 때마다 페이지 테이블의 

내용을 참조하여 실제 메모리를 계산해야 하는 낭비가 생긴다.

이를 보완이 필요한데 인텔 MS는 TLB(Translation Lookaside Buffer)라는 버퍼를 두고 이곳에

변환에 사용되었던 가상 주소와 위치 정보와 실제 매핑되어진 메모리의 위치 정보를 일정 개수만큼

유지함으로써 다음번 메모리 변환 시에서 해당 가상 메모리 위치를 참조할 경우 이 영역을 참조함으로

변환에 드는 시간을 줄이고 있다.



2. 세그먼트 기법

페이징 기법과 원리는 같다. 하지만 각각의 세그먼트는 그 크기가 고정되어 있지 않다.

예를 들어 컴파일러가 응용프로그램을 만들때 코드부분, 리소스부분, 디버깅 정보 부분같이 서로

연관된 부분을 메모리에 올려 처리 효율을올리는 방식이다. 이 기법은 메모리 단편화 현상이라는

약점이 있다.

메모리 단편화 : 서로 다른 크기의 세그먼트들에 대하여 필요시 메모리에 올리고 필요가 없어지면

내리는 작업을 오랫동안 반복하다 보면 외부단편화가 생긴다( Fragmentation ). 외부단편화란

용량이 큰 빈 메모리 공간은 줄어들고 작은 메모리 공간들이 점점 늘어남으로써 실제로 큰 세그먼트가

들어갈 수 있는 공간이 없어지는 경우를 말한다.

단편화를 없애려면 세그먼트들을 재배치 하여 큰 공간을 마련해야 하는데 그런작업은 오버헤드를

일으키게 된다.

이것을 보안하기 위해 페이징+세그먼트 병합기법을 만들게 된다.




3. 세그먼트와 페이징 기법의 병합

각각의 장점만 가지고 있다.

페이징의 경우 외부 단편화가 존재하지 않고 주기억장치를 효율적으로 사용할 수 있으며

세그먼트의 경우 가변적인 자료 구조, 모듈성으 ㅣ처리, 공유와 보호를 지원하는 장점을

가지고 있다.




마이크로프로세서에서 명시적 혹은 암시적으로 지시되어지는 세그먼트 레지스터와 사용자가 지정한

메모리를 조합하는 과정을 우리는 세그먼테이션 이라 부르는데.

이 작업은 세그먼트 디스크립터에 정의되어 있는 여러가지 보호 속성과 제한 속성을 통하여 시스템에

보호 작업을 수행하게 된다.


세그먼테이션 과정을 통해 세그먼트 레지스터와 사용자가 지정한 32비트의 논리적주소(Local address

가 합해져서 새로운 32비트의 선형주소(linear address)가 만들어 진다.



I/O 방법별 성능 비교

Posted 2012. 10. 17. 14:04

NetWork Programming for Microsoft Windows 책. Chaper 6.


I/O 모델 

 연결시도 /연결 성공

메모리

사용량(KB) 

Non-page

pool 

CPU

사용량 

스레드

개수 

처리량

(send/recv bytes per second) 

 Blocking

7000/1008

12000/1008 

25,632

25,408 

36,121,

36,353 

10~60%

5~40% 

2016 

2198148/2198148

404227/402227

 non-blocking

7000/4011

12000/5779 

4208

5224 

135,123

156,260 

95~100%

95~100% 

0/0

0/0 

WSAAsync

Select

7000/1956

12000/5779 

3640

4884 

38246

42992 

75~85%

90~100% 

3

1610204/1637819 

652902/652902

 WSAEvent

Select

7000/6999

12000/11080

46000/45933 

10502

19214

37392 

36402

39040

121624 

65~85%

50~60%

80~90% 

113

192

791 

4921350/5186297 

3217493/3217493

3851152/3834511

 Overlapped

(event)

7000/5558

12000/12000

49000/48996 

21844

60576

241208 

34944

48060

155480 

65~85%

35~45%

85~95% 

66

195

792 

502423/4095644

1803878/1803878 

3865152/3834511

overlapped

( c p ) 

7000/7000

12000/12000

50000/49997 

36160

59256

242272 

31128

38862

148192 

40~50%

40~50%

55~65% 

2

2

6282473/3893507 

5027914/5027095

4326946/4325496

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



« PREV : 1 : ··· : 55 : 56 : 57 : 58 : 59 : 60 : 61 : ··· : 77 : NEXT »