6월, 2014의 게시물 표시

[리눅스 커널] 커널 자료구조

reference : 리눅스 커널 심층 분석, 로버트 러브 지음, 황정동 옮김 6장 커널 자료구조 1. 연결 리스트 연결 리스트는 노드라고 부르는 가변적인 개수의 데이터를 저장하고 관리하는 기능을 제공한다. 정적 배열과 달리 연결 리스트는 동적으로 데이터를 새엇ㅇ해 리스트에 추가할 수 있다. 그러므로 컴파일 시점에 미리 개수를 알 수 없는 데이터를 관리할 수 있다. 데이터가 한꺼번에 동시에 만들어지지 않으므로, 이 데이터는 인접한 메모리 공간에 모여 있지 않을 수 있다.따라서 데이터를 서로 연결시키는 방법이 있어야 하므로 리스트의 각 데이터에는 다음 데이터의 위치를 가리키는 next 포인터가 들어 있다. 리스트에 데이터를 추가하거나 삭제할 때는 다음 노드를 가리키는 포인터를 조정하면 된다. 단일 연결리스트와 이중 연결 리스트 연결 리스트를 나타내는 가장 단순한 자료구조의 형태는 다음과 같다. /* 연결 리스트의 데이터 항목 */ struct list_element {     void *data;                     /* 항목에 담긴 데이터(payload) */     struct list_element *next; /* 다음 항목을 가리키는 포인터 */ }; 이중 연결 리스트를 나타내는 자료구조의 형태는 다음과 같다. /* 연결 리스트의 데이터 항목 */ struct list_element {     void *data;                     /* 항목에 담긴 데이터(payload) */     struct list_element *next; /* 다음 항목을 가리키는 포인터 */     struct list_eleme...

[리눅스 시스템 프로그래밍] 6 세션과 프로세스 그룹

세션 시스템 호출 셸은 로그인 시점에 새로운 세션을 생성한다. 이러한 작업은 새로운 세션을 쉽게 생성하는 특수 시스템 호출을 사용해서 수행한다. #include <unistd.h> pid_t setsid (void); setsid()는 새로운 세션 내부에 새로운 프로세스 그룹을 생성하며, 호출한 프로세스를 세션과 프로세스 그룹 모두의 리더로 만든다.(새로운 세션에서 제어하는 tty가 없는 유일한 구성원이 된다.) 이는 데몬이나 셸에 유용한 특성이다. 데몬은 세션 구성원과 터미널 제어를 원하지 않으며, 셸은 사용자가 로그인할 때마다 새로운 세션 생성을 원하기 때문이다. 여기서 tty는 유닉스 전문 용어로  tty 는 단순히 읽기와 쓰기를 넘어 몇 가지 추가적인 명령어를 지원하는 디바이스 파일을 뜻합니다. 그리고  터미널 은 사실상 이 tty와 동일한 의미로 사용됩니다. 일부 tty는 하드웨어 디바이스를 위해 커널이 제공하며 그 예로 키보드에서 들어오는 입력과 텍스트 모드 화면으로 나가는 출력, 시리얼 라인을 통해 전송되는 입출력이 있습니다. 그 외의 tty는 씬 커널 레이어를 통해 터미널 에뮬레이터라고 불리는 프로그램으로 제공되며 이런 tty를 pseudo-tty 로 부르기도 합니다. 터미널 에뮬레이터로는 Xterm(X 윈도우 시스템), Screen(프로그램과 다른 터미널 사이에 독립적인 계층을 제공), SSH(한 머신에서 프로그램으로 다른 머신의 터미널에 연결), Expect(스크립팅 터미널 인터랙션용) 등이 있습니다. http://www.myservlab.com/144 성공하면 setsid()는 새롭게 생성된 세션의 세션 ID를 반환한다. 실패하면 호출은 -1을 반환하며 유일하게 가능한 errno 코드는 EPERM이다.(프로세스가 현재 프로세스 그룹 리더라는 사실을 알려준다.) 특정 프로세스가 프로세스 그룹 리더가 되지 않도록 만드는 확실한 방법은 fork이며,  부모 프로세스가 종료된 다음에 자식 프로...

[Security] SSH

Secure Shell Secure Shell  ( SSH ) is a cryptographic  network protocol  for secure  data communication , remote  command-line   login , remote command execution, and other secure  network services  between two networked computers. It connects, via a  secure channel  over an insecure network, a server and a client running  SSH server  and  SSH client  programs, respectively. [1]  The protocol specification distinguishes between two major versions that are referred to as SSH-1 and SSH-2. The best-known application of the protocol is for access to  shell accounts  on  Unix-like  operating systems, but it can also be used in a similar fashion for accounts on  Windows . It was designed as a replacement for  Telnet  and other  insecure  remote  shell  protocols such as the Berkeley  rsh  and  rexec  protocols, which send information, nota...