General/Tip For Programming

[용어정리] routine and subroutine : 루틴과 서브 루틴

croute 2009. 11. 30. 06:06

routine and subroutine : 루틴과 서브 루틴

 

컴퓨터 프로그래밍에서 루틴과 서브 루틴은

어떤 프로그램이 실행될 때 불려지거나

반복해서 사용되도록 만들어진 일련의 코드들을 지칭하는 용어이다.

 

 

이를 이용하면 프로그램을 더 짧으면서도 읽고 쓰기 쉽게 만들 수 있으며,

하나의 루틴이 다수의 프로그램에서 사용될 수 있어서 다른 프로그래머들이 코드를

다시 작성하지 않도록 해준다. 프로그램 로직의 주요 부분에서는 필요할 경우 공통 루틴으로

분기할 수 있으며, 해당 루틴의 작업이 완료되면 분기된 명령어의 다음 명령어로 복귀한다.

어셈블러 언어에서는 매크로 명령어(macro instruction)라 불리는 인터페이스를 가진

매크로 정의 부분에 변수의 입력을 필요로 하는 루틴이 코딩될 수 있다.

프로그래머는 루틴을 포함하거나 그 루틴으로 분기하는 대신 매크로 명령어를 사용할 수 있다.

매크로 정의 및 명령어는 다수의 프로그램 특히, 소프트웨어 개발 프로젝트에 참여한

프로그래머 사이에서 공유되는 경우가 많다.

 

고급 프로그래밍 언어에서는 공통적으로 필요한 많은 루틴이 미리 함수로 만들어진다.

어떤 함수는 프로그램의 다른 코드와 함께 컴파일 되고, 어떤 함수는 프로그램이 실행될 때

시스템 서비스를 위한 동적 호출(dynamic call)을 하는 부분에서 컴파일 되기도 한다.

함수들은 때때로 라이브러리 루틴이라고도 불린다. 컴파일러와 라이브러리 루틴은 대체로

관련 소프트웨어 개발 패키지의 일부분이 된다.

윈도우와 같은 PC의 운영체계에서는 특정 입출력 장치와 상호작용 하는 기능을

수행하는 시스템 루틴을 동적 링크 라이브러리(DLL ; dynamic link library) 루틴이라 한다.

이 루틴들은 처음 불려질 때 비로소 메모리에 실제 로딩되기 때문에 동적(動的)이라는 말이

앞에 붙는다.비교적 최근에 쓰이기 시작한 용어인 프로시저도 의미상으로는 루틴과 거의 비슷하다.

 

 

=============================================================

 

세그멘테이션이라는 용어가, 다른 부류에서 쓰이는 의미가 조금씩 다른것으로 알고 있는데, 님의 질문상에서 주소 결속이라는 말도 하신것 보니, 아무래도 메모리분할을 말씀하시는 것 같네요.. 메모리 분할 방법의 하나라고 일단 말씀드릴수 있구요

페이징두 아시는지 .. 페이징은.. 프로세서를 일률적으로 나누워서 페이지 테이블 이라는 매개체를 통하여 물리적 공간에 매치 시키는 방법이빈다. 세그멘테이션은 일률적인 단위로 프로세서를 나누는 것이아니라, '사용자' 측면에서 나누는 방식이지요

프로그램을 함수나, 서브루틴 등으로 큰 덩어리의 가변적인 단위가 세그먼트 예요..
즉 사용 자가 생각하고 있는 세그먼트 단위(함수, 서브루틴, 스텍, 행렬등등)들이 논리적 공간에 있는 데, 이것들을 세그먼트 테이블를 통하여 물리주소 공간에 매치시켜주는 방식이지요
아.. 그전에 알아야 할 것이 있네요

주소 결속이라는 것은 한마디로 위에서 말한 "논리주소=>물리주소" 매치시키는 것을 말합니다. 주소결속 = 주소 매칭 = 주소 바인딩 (Address Binding)

논리주소는 고급언어를 사용 하여 프로그램 할때 참조 하는주소로
예를들면 int a = 3 ; 이라는 구문을 사용 하면, 추상적으로 정수 a라는 곳에 3의 값을 대입한다.. 그러나 ,실제로 a가 메모리상에서 어디에 있다라는 것은 우리는 모르죠.
이것을 실제 메모리에서 사용 하는 주소, 즉 물리주소로 바꾸는것입니다.
우리가 우뇌로 어떤 한 문장이 저장된다고 하면,그게 우뇌라고 하는것만 알지 우뇌의 어떤 세포가 그 문장을 가지고 있는 것지는 모르잖아요 ..하하..

매칭되는 시점,즉 바인딩 되는 타임도 다르지요
프로그램시점,컴파일시점,적재시점,실행시점에서 바인딩 될 수 가 있는데요..
요즘 시스템에서는 실행 시점을 많이 사용 하지요. 왜냐하면 실행 할 때에 변할 수가 있으니, 실제 프로그램이 CPU에서 돌아갈 때에 논리주소로 변환하는 방법을 사용 한답니당..
허접한 답변이 였는데, 어떻게 도움이 되셨을런지 모르겠네요..
 
=============================================================
 
시스템처리 문제는 똑같은 크기의 페이지와 세크먼트라는 구분을 사용합니다.
그에따른 기법으로 페이징 기법과 세그멘테이션 기법이 있습니다.

페이징 기법은 하나의 작업을 똑같은 크기의 페이지 라는 물리적인 단위로 나누어 CPU의 프레임에 적재시킵니다.
하지만 세크멘테이션 기법은 하나의 작업을 논리적인 단위로 나누어서 적재시키는 방법입니다.
즉 하나의 프로그램은 프로시져나 서브루틴이나 모듈, 함수들의 단위로 나누거나나,
행렬, 스택등에 이름을 부여하기도 합니다.

그래서 같은 크기의 페이지와는 달리 세그먼트는 그 크기가 전부 다르게 됩니다.
그래서 서로의 인터페이스나 레퍼런스는 세그먼의 고유아이디라고 볼수 있는 세크먼트
번호에 의해 이루어 집니다.

아래는 "정보통신용어사전" 에서 발췌한 내용임을 밝힙니다.
도움되시길........^^;


[IT용어]

① 서로 구분되는 기억 장치의 연속된 한 영역.

② 어떤 프로그램이 너무 커서 한 번에 주기억 장치에 올라올 수 없어 갈아넣기 기법을 사용하여 쪼개었을 때, 나뉜 각 부분을 가리키는 말.

③ 세그먼테이션 방식의 가상 기억 장치에서 사용되는 것으로, 페이징에서 페이지와 비슷하나 길이가 가변이고 기억 장치의 어느 곳에도 자리할 수 있는 기억 장소 영역을 가리키는 말. 한 세그먼트는 프로그램의 논리적인 한 구성 단위를 저장한다.

④계층 모형의 데이터베이스에서 여러 항목이 모여 레코드에 해당하는 단위.


가상 기억 장치(virtual memory)
사용자로 하여금 주기억 장치의 용량보다 훨씬 큰 가상 공간을 쓸 수 있게 하는 기억 장소 관리 방법. 주소 공간과 실제 공간을 완전히 구분하여 사용자는 주소 공간에 프로그램을 실행하며 운영 체계가 이것과 실제 공간을 연결해 준다. 페이징 기법이나 세그먼테이션 기법을 사용하는 기억 장치이며 이러한 방법으로 실제 존재하지 않는 기억 장치가 있는 것처럼 사용할 수 있다.