« Previous : 1 : 2 : 3 : 4 : 5 : 6 : Next »
Max Bruning
 

많은 개발자들이 리눅스용으로 어플리케이션을 작성하고 있었습니다만 솔라리스10의 수많은 새로운 기능과 썬의 계속되는 AMD, 인텔 프로세서 지원을 통해 개발자들이 솔라리스 플랫폼에서 어플리케이션을 작성하는 것에 대해 관심을 가지게되었습니다. 이 글은 각 운영체제에서의 개발 환경의 유사점과 차이점에 대해 살펴 봅니다. 이 글을 통해 어플리케이션을 리눅스에서 솔라리스로 포팅 하거나, 리눅스에서 개발 경험이 있는 개발자가 솔라리스에서 프로그래밍을 하는 데 도움을 얻을 수 있을 것입니다.

이 글에서 용어 "솔라리스"는 솔라리스 10 (과 오픈 솔라리스)를 나타내고 "리눅스" 는 리눅스 2.6을 나타 냅니다. 이 글에서 다루는 많은 부분들은 솔라리스와 리눅스의 이전 버젼에도 또한 적용될 것입니다. 이 글의 테스트는 SuSe 9.1 하에서 이루어 졌으나 리눅스 배포판이란 범용 리눅스를 뜻합니다. 또한 이 글은 C++ 도 동일하게 수행되겠지만 C 프로그래밍을 작성하는데 촛점을 맞추고 있습니다. 자바 기반의 어플리케이션은 리눅스 혹은 솔라리스에 특정한 함수를 호출해서는 안되는 관계로 어플리케이션은 포팅이 가능할 것입니다.

소개

이 글에서는 솔라리스와 리눅스에서 어플리케이션 프로그래머와 분석가들에게 보여질 수 있는 동일점과 차이점에 대해 생각해 봅니다. 꼭 이것이 차이점에 대한 소모적인 설명을 뜻하거나 어떠한 OS가 상대편 보다 좋다는 것을 보여주는 것은 아닙니다. 이 글은 한쪽 OS에 경험이 많은 개발자가 다른쪽 OS 또한 쉽게 다를 수 있도록 돕는데 그 목적이 있습니다.

POSIX과 호환되며 어떠한 시스템 콜 혹은 라이브러리 함수도 호출하지 않는 간단한 어플리케이션은 어떠한 수정도 없이 두 OS 상에 포팅이 가능할 것입니다. 즉 어플리케이션을 작성하고 솔라리스 혹은 리눅스에서 컴파일 한 다음 다른 OS 에서 간단히 재 컴파일하면 두 곳 모두에서 작동할 수 있습니다. 대부분의 시스템 콜 과 라이브러리 루틴은 이와 같은 것입니다.

리눅스의 많은 시스템 콜들은 솔라리스에 라이브러리 함수 형태로 존재하며, 또한 그 반대도 마찬가지입니다. 예를 들어 sched_setscheduler() 는 리눅스에서 시스템 콜이고 솔라리스에서는 priocntl(2) 시스템 콜을 호출 하는 라이브러리 함수 입니다. priocntl(2) 시스템 콜은 리눅스에서는 존재 하지않습니다만 리눅스는 시간 공유, 실시간 이상의 멀티 스케쥴러를 지원하지 않습니다. 뒷부분에서 시스템콜을 기능적 섹션으로 그룹을 묶고 각 OS에서 어떠한 것이 사용 가능한지 비교해 봅니다.

리눅스 세계의 대부분의 어플리케이션과 툴킷은 어떠한 수정도 없이 컴파일이 가능할 것입니다. 여기에는 gcc, emacs, MySQL, perl 외 수많은 것들이 포함되어있습니다. 컴파일된 바이너리 패키지는 http://www.sunfreeware.com 에서 다운로드할 수 있습니다.

리눅스와 솔라리스를 비교 하는 몇몇 글이 존재 하지만 대부분은 이전 버전들을 비교하는 글이었습니다. 이런 글들은 웹에서 "리눅스 솔라리스 비교 " 로 검색해 볼 수 있습니다. Seal Rock Research White Paper (pdf) 은 솔라리스10 과 리눅스 2.6 버젼에 대해 다루고있습니다. Migrating Solaris Applications to Linux 은 솔라리스 어플리케이션을 리눅스로 포팅 하는 것에 대해 몇장에 걸쳐서 다루고 있습니다.

솔라리스와 리눅스는 많은 관리상의 차이점이 존재하며, 한 OS의 각 배포판별로도 많은 차이점이 있습니다 . 솔라리스10은 솔라리스 이전 버젼에 비해 가장 크게 변화된 "서비스 관리 프레임워크(SMF;Service Management Framework)" 라는 기능을 가지고 있습니다. 시스템 관리상의 차이점은 이 글에서 다루지 않지만 개발자에게 영향을 미치는 경우 추후 다루도록 하겠습니다.

시스템 콜과 라이브러리

리눅스에 존재하는 대부분의 시스템 콜과 라이브러리는 솔라리스에도 존재합니다. 이번 문단에서는 두 시스템 간에 각각 다른 시스템 콜과 라이브러리 루틴에 대해 다룹니다.

솔라리스는 시스템 콜의 리스트를 /usr/include/sys/syscall.h 에 보관 합니다. 리눅스는 동일한 정보를 /usr/include/asm/unistd.h 에 보관 합니다. (주목할 점은 리눅스와 솔라리스 둘다 unistd.h syscall.h 파일을 가지며 종종 동일한 내용을 가질때도 있다는 사실입니다.)

시스템 콜에 대한 문서는 솔라리스, 리눅스에서 모두 /usr/share/man/man2 에 존재합니다. (솔라리스는 /usr/man 에서 동일한 곳으로 심볼릭 링크가 걸려 있습니다.) 라이브러리 루틴은 메뉴얼의 다양한 섹션에 문서화되어있습니다. 리눅스, 솔라리스의 라이브러리 섹션에 대한 개관을 위해 man intro.3 를 보도록 합니다. 주목할 점은 솔라리스는 라이브러리 루틴을 리눅스보다 더 잘 분류해 놓았다는 점입니다. 예를 들어 aio_read() 는 솔라리스에서 aio_read(3RT) 에 분류되어 있지만 리눅스에서는 aio_read(3)에 분류되어 있습니다. 결과적으로 솔라리스에서 aio_read() 를 사용하는 프로그램을 컴파일할 때 개발자는 반드시 실시간 라이브러리 -lrt 를 통해 실시간 라이브러리를 컴파일/링크 할때 포함시켜야 하지만 리눅스에서는 그럴 필요가 없습니다.

리눅스와 솔라리스는 둘다 200개 이상의 서로 다른 라이브러리를 가지고 있고 라이브러리 내에 50,000 개 정도의 함수를 가지고 있습니다.

다음의 표는 리눅스와 솔라리스의 몇몇 라이브러리를 목록화한 것입니다. 주의할 점은 이것이 전체 목록은 아니라는 것이고 이러한 라이브러리들은 기본 인스톨이 된 시스템에서는 각각 따로 다운로드 및 설치를 해야 한다는 것입니다.

표 1: 리눅스와 솔라리스의 몇몇 라이브러리들
 
 
솔라리스
리눅스
설명
libc
libc
표준 C 라이브러리 (POSIX, SysV, ANSI, 등등.) 솔라리스의 libc man 참조.
libucb
libc
UCB (University California Berkeley) 호환 바이너리
libmalloc
libc
몇가지 서로 다른 malloc 라이브러리가 존재함; 기본 함수는 libc 에 존재.
libsocket
libc
소켓 라이브러리 (리눅스에서는 libc 에 존재).
libxnet
libc
X/Open 네트워킹 라이브러리
libresolv
libresolv
DNS 루틴들 (솔라리스에서는, inet_* routines)
libnsl
libnsl/libc
네트워크 서비스 라이브러리 (리눅스 - nis/nis+ 루틴들)
librpc
librpc
RPC 함수들
libslp
libslp
Service Location Protocol
libsasl
libsasl
간단한 인증과 보안 레이어
libaio
libaio
비동기 I/O 라이브러리
libdoor
 
Door 지원 (door_create(), door_return(), 등등.)
librt
librt
POSIX 실시간 라이브러리
libcfgadm
 
설정 관리 라이브러리
libcontract
 
계약 관리 라이브러리 (솔라리스에서 man contract.4 참조)
libcpc
 
CPU 성능 카운터 라이브러리 (리눅스에서는 아마 커널 모듈을 설치해야 할 것임)
libdat
 
직접 접근 전송 라이브러리 (http://www.datcollaborative.org)
libelf
libelf
ELF 지원 라이브러리
libm
libm
수학 라이브러리

다음 섹션에서는 몇가지 시스템 콜과 라이브러리들에 대해 좀 더 자세히 알아 봅니다. 시스템 간의 차이점에 대해 집중하겠습니다.

소켓과 네트워킹

대부분의 소켓, 네트워킹 코드는 반드시 사용하는 OS에 따라 다시 재컴파일 되어야 하고 반드시 실행이 가능해야 합니다. 이 섹션은 솔라리스와 리눅스에서 보편적으로 사용되는 네트워크에 관련된 시스템 콜과 라이브러리를 비교합니다.

socket()

socket() 루틴, 이에 덧붙여서 AF_UNIX, AF_INET, 와 AF_INET6 도메인 매개변수들은 솔라리스와 리눅스에서 추가적인 값을 각각 가지고 있습니다. 솔라리스에서 AF_NCA 도메인은 소켓에 네트워크 캐쉬 혹은 가속기 (nca(1) 참조)를 지정하여 사용 할 수 있도록 합니다. 대부분의 어드레스 패밀리(도메인들)은 리눅스, 솔라리스에 둘다 존재 합니다. 주의: 솔라리스에 /usr/include/sys/socket.h 그리고 리눅스에 /usr/include/linux/socket.h 를 비교하여 가능한 어드레스 패밀리를 참고 하시기 바랍니다. 그러나 개발자는 몇몇 이러한 도메인을 지원하는 코드를 작성 혹은 다운로드 받아야 할지도 모릅니다.

리눅스는socket(2) 맨 페이지에 기술된 대로 몇가지 추가적인 도메인을 가지고 있습니다. 기술된 추가적인 도메인은 다음과 같습니다:

  • AF_IPX - Novell IPX 프로토콜(아마도 오로지 수세를 위한 것임?).
  • AF_NETLINK - 커널/유저 인터페이스 디바이스로 유저가 커널 모듈에 접근 할 수 있도록 허락해 줌. 주의: 솔라리스에서는 다른 방법으로 똑같은 일을 할 수 있는 방법이 존재 함(리눅스에서도 마찬가지).
  • AF_X25 - X25 프로토콜. 솔라리스에서 이 도메인은 Solstice X.25 제품에 포함되 있음.
  • AF_AX25 - 아마츄어 라디오 AX.25 프로토콜.
  • AF_ATMPVC - ATM 상의 영구적인 가상 서킷.
  • AF_APPLETALK - 리눅스의 man ddp 참고. 솔라리스에도 존재 하지만 문서화 되어 있지는 않음.
  • AF_PACKET - 리눅스의 man packet.7 참고. Raw 패킷 인터페이스. 솔라리스에서는 NIC 디바이스를 열고 use getmsg(2)/putmsg(2) 를 사용하여 DLPI를 통한 raw 패킷을 전송/수신 할 수 있음. (DLPI에 대한 자세한 설명은 Data Link Provider Interface (DLPI), Version 2 를 참조).
bind()

리눅스 멘 페이지 (man bind.2) 는 AF_INETAF_UNIX 사이의 어드레스 패밀리 차이점에 대한 정보를 포함하고 있음. 솔라리스는 man bind.3socket 을 참조.

listen()

리눅스와 솔라리스 둘다 backlog 매개 변수는 (listen()의 두번째 매개변수) 수락되길 기다리고 있는 접속된 큐의 길이를 나타 내고 있음. 리눅스 맨 페이지에서는 이렇게 설명 하고 있고 솔라리스 멘 페이지에서는 그냥 "지연되고 있는 연결 큐"라고 설명되어 있습니다.

accept()

리눅스는 3가지의 연결 기반 소켓 타입을 지원합니다: SOCK_STREAM, SOCK_SEQPACKET, 그리고 SOCK_RDM 반면 솔라리스에서는 오직 SOCK_STREAM 만 기술 되어 있습니다. 리눅스 구현에서는 몇가지 소켓 플래그를 상속 하지 않습니다. 이 것이 구현의 차이점을 불러 왔을 것입니다.

connect()

리눅스 멘페이지는 (man connect.2) SOCK_SEQPACKET 를 기술 하고 있지만 솔라리스에서는 기술되어 있지 않습니다. 리눅스는 struct sockaddr 내의 sa_familyAF_UNSPEC 으로 세팅해서 주소에 연결 함으로써 비연결 소켓과 connect() 을 구분하고 있습니다. 이러한 동작은 솔라리스에는 기술되어 있지 않습니다.

send()/recv()

다른 소켓 라이브러리 함수들과 같이, 이러한 함수들은 두 시스템에서 거의 동일하게 동작합니다. 리눅스는 멘페이지에서 몇가지 추가적인 flags 매개 변수를 가지고 있습니다.

shutdown()

솔라리스와 리눅스간에 주목할만한 차이점은 없습니다.

네트워킹 예제

몇가지 차이점이 들어나는 어플리케이션을 확인 하는 것이 유용할 것입니다. tracedump 프로그램은 패킷 캡춰 라이브러리 (libpcap) 를 이용하여 유저 레벨에서의 이더넷 패킷을 읽어 들입니다. 이 코드는 raw 이더넷이 솔라리스, 리눅스 간에 상당히 다름을 알아 낼 수 있습니다. (libpcap 은 FreeBSD, HP-UX, AIX 같은 서로 다른 시스템 간의 차이점을 알아 내는데 유용할 수 있습니다.) libpcap에서 응용 가능한 코드는 pcap-linux.cpcap-dlpi.c에 존재합니다. DLPI 코드는 솔라리스, HP-UX, AIX, 그리고 다른 운영체제를 위해 사용 됩니다. 리눅스는 표준 socket 호출을 통해 raw 소켓 패킷을 읽어 들일 수 있는 방법을 제공합니다. 솔라리스는 getmsg(2) putmsg(2) 를 호출해서 DLPI 패킷을 주고 받습니다.

다음의 코드는 솔라리스의 네트워크 인터페이스에서 유저-레벨 패킷을 캡춰 하는 방법을 나타내고 있습니다. 바로 뒤에 리눅스에서 동일한 작업을 하는 코드가 따라 옵니다. 이 코드는 libpcap 라이브러리의 매우 엄청난 간략화 버젼입니다.

#include <sys/types.h>
#include <sys/dlpi.h>
#include <sys/stream.h>
#include <stdio.h>

#include <errno.h>
#include <stropts.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>

int
main(int argc, char *argv[])
{
    register char *cp;
    int fd;
    dl_info_ack_t *infop;
    union DL_primitives dlp;
    dl_info_req_t inforeq;
      dl_bind_req_t    bindreq;
    dl_attach_req_t attachreq;
    dl_promiscon_req_t promisconreq;
    struct    strbuf    ctl, data;
    int    flags;
    char buffer[8192];
    dl_error_ack_t *edlp;

    fd = open(argv[1], O_RDWR);  /* for instance, /dev/elxl0 */

    /* attach to a specific interface */
    attachreq.dl_primitive = DL_ATTACH_REQ;
    attachreq.dl_ppa = 0;  /* assume we want /dev/xxx0 */
    ctl.maxlen = 0;
    ctl.len = sizeof(attachreq);
    ctl.buf = (char *)&attachreq;
    flags = 0;
    /* send attach req */
    putmsg(fd, &ctl, (struct strbuf *)NULL, flags);
    ctl.maxlen = sizeof(dlp);
    ctl.len = 0;
    ctl.buf = (char *)&dlp;
    /* get ok ack, may contain error */
    getmsg(fd, &ctl, (struct strbuf*)NULL, &flags);

    memset((char *)&bindreq, 0, sizeof(bindreq));
    /* the following bind might not need to be done */
    bindreq.dl_primitive = DL_BIND_REQ;
    bindreq.dl_sap = 0; 
    bindreq.dl_max_conind = 1;
    bindreq.dl_service_mode = DL_CLDLS;
    bindreq.dl_conn_mgmt = 0;
    bindreq.dl_xidtest_flg = 0;
    ctl.maxlen = 0;
    ctl.len = sizeof(bindreq);
    ctl.buf = (char *)&bindreq;
    flags = 0;
    /* send bind req */
    putmsg(fd, &ctl, (struct strbuf *)NULL, flags);
    ctl.maxlen = sizeof(dlp);
    ctl.len = 0;
    ctl.buf = (char *)&dlp;
    /* get bind ack */
    getmsg(fd, &ctl, (struct strbuf*)NULL, &flags);

    promisconreq.dl_primitive = DL_PROMISCON_REQ;
    promisconreq.dl_level = DL_PROMISC_PHYS;
    ctl.maxlen = 0;
    ctl.len = sizeof(promisconreq);
    ctl.buf = (char *)&promisconreq;
    flags = 0;
    /* send promiscuous on req */
    putmsg(fd, &ctl, (struct strbuf *)NULL, flags);
    ctl.maxlen = sizeof(dlp);
    ctl.len = 0;
    ctl.buf = (char *)&dlp;
    /* get get ok ack */
    getmsg(fd, &ctl, (struct strbuf*)NULL, &flags);

    promisconreq.dl_primitive = DL_PROMISCON_REQ;
    promisconreq.dl_level = DL_PROMISC_SAP;
    ctl.maxlen = 0;
    ctl.len = sizeof(promisconreq);
    ctl.buf = (char *)&promisconreq;
    flags = 0;
    /* send promiscuous on req */
    putmsg(fd, &ctl, (struct strbuf *)NULL, flags);
    ctl.maxlen = sizeof(dlp);
    ctl.len = 0;
    ctl.buf = (char *)&dlp;
    /* get get ok ack */
    getmsg(fd, &ctl, (struct strbuf*)NULL, &flags);

    /* read and echo to stdout whatever comes to us */
    while (1) {
      data.buf = buffer;
      data.maxlen = sizeof(buffer);
      data.len = 0;
      ctl.buf = (char *) &dlp;
      ctl.maxlen = sizeof(dlp);
      ctl.len = 0;
      flags = 0;
      getmsg(fd, &ctl, &data, &flags);
      write(1, "\nCTL:\n", 6);
      write(1, ctl.buf, ctl.len);
      write(1, "\nDAT:\n", 6);
      write(1, data.buf, data.len);
    }
}

솔라리스 코드는 DLPI 요청을 만들고 DLPI 응답을 받아서 인터페이스에게 인터페이스에 도착하는 모든 패킷의 카피를 만들도록 요청 합니다.

리눅스의 코드는 훨씬 간단합니다. socket(2) 콜은 raw 패킷을 지정할 수 있도록 허락합니다. 리눅스는 DLPI나 STREAMS을 사용하지 않습니다.

#include <errno.h>
#include <stdlib.h>
#include <unistd.h>

#include <fcntl.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>

#include <linux/if_ether.h>
#include <linux/if_packet.h>
#include <net/if_arp.h>
#include <stdio.h>

int
main(int argc, char *argv[])
{
    int    sock_fd = -1;
    struct sockaddr_ll    sll, from;
    struct packet_mreq    mr;
    socklen_t    fromlen;
    int        packet_len;
    char        buffer[8192];

    sock_fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

    memset(&sll, 0, sizeof(sll));
    sll.sll_family    = AF_PACKET;
    sll.sll_ifindex    = 0;
    sll.sll_protocol    = htons(ETH_P_ALL);

    bind(sock_fd, (struct sockaddr *) &sll, sizeof(sll));

    while (1) {
      fromlen = sizeof(from);
      packet_len = recvfrom(
        sock_fd, buffer, sizeof(buffer), MSG_TRUNC,
        (struct sockaddr *) &from, &fromlen);
      write(1, buffer, packet_len);
    }
}

프로세스/프로세서 관리

솔라리스와 리눅스에서프로세스 는 프로그램의 동작하고 있는 실체 입니다. 솔라리스와 리눅스(2.6)에서 프로세스는 주소 공간을 위한 컨테이너 이자 하나 혹은 이상의 쓰레드 입니다. 시스템의 모든 프로세스들은 특수한 프로세스 ID(PID)를 가지고 있고 프로세스가 종료 된 후에도 일정 기간동안 유일성이 유지됩니다. 프로세스들은 fork(2) 와 이와 비슷한 동작을 하는 것들에 의해 만들어 집니다. 리눅스에서 프로세스(그리고 쓰레드)는 clone(2)을 사용하여 생성될 수 있습니다. 그러나 pthread_create(3) 가 좀더 포팅이 용이 합니다. 솔라리스에서 기술되지 않은 lwp_create() 시스템 콜은 어떠한 면에서 clone(2)과 비슷합니다.

vfork() 는 두 시스템에서 모두 비슷하게 동작합니다. 솔라리스는 fork1() forkall() 을 가지고 있습니다. fork1() 의 경우, 자식 프로세스는 오직 fork() 콜을 실행 시키는 쓰레드를 가지도록 합니다; forkall() 의 경우, 부모 프로세스 안의 모든 쓰레드는 자식에게 복사 됩니다. 기본 fork 는 fork1() 입니다. forkall() 은 반드시 명시적으로 사용되어야 합니다. forkall() 은 리눅스에서는 존재 하지 않습니다.

ps -elfL 커맨드는 리눅스와 솔라리스 둘다에서 프로세스 내의 쓰레드를 확인 하는데 사용될 수 있습니다. 두 시스템 모두 LWP 의 숫자와 프로세스내의 각 쓰레드의 lwpid 를 보여 줍니다. 알아둘 점은 리눅스에서 lwpid 는 프로세스들 간에서도 유일한 숫자 입니다. 솔라리스에서 lwpid는 프로세스 안에서만 유일합니다. 리눅스에서 멀티쓰레드 프로세스의 프로세스 ID는 사실 쓰레드 그룹의 ID입니다. 쓰레드 그룹 ID는 메인 쓰레드의 프로세스 ID와 동일 합니다. Sending a signal to any lwpid 에 시그널(kill(1)/kill(2)을 이용해서) 을 보내는 것은 프로세스에 시그널을 보내는 것과 동일 합니다. 솔라리스에서 사용자는 pid 로 시그널을 보냅니다. 두경우에서 만약 기본 동작이 취해진다면, 프로세스는 일반적으로 종료되고 쓰레드는 모두 중지 됩니다. ps(1) 맨페이지에서 자세한 사항을 참고 바랍니다.

리눅스와 솔라리스는 둘다 프로세서에 프로세스를 바인딩 하는 구문을 제공합니다. 리눅스는 각 프로세서를 상호배타적으로 사용한다는 가정하에 바인딩을 허락 합니다. 솔라리스는 배타적인 사용을 위해 프로세서의 셋에 바인딩 하는 것을 허락합니다. (CPU fencing 이라 불림) 그러나 그룹을 상호배타적인 용도로 바인딩 하는 것을 허락 하지 않습니다 (솔라리스 존은 제외). 리눅스는 CPU fencing 메카니즘을 가지고 있지 않습니다. 그러나 웹에서 관련된 구현은 찾을 수 있습니다. (예들 들어 bullopensource.org 사이트의 CPUSETS for Linux page ). 바인딩 작업을 하는 리눅스 시스템 콜은 sched_setaffinity(2)sched_getaffinity(2) 입니다. 솔라리스에서는 다음과 같습니다:

  • processor_bind(2) 는 프로세서에 LWP 혹은 프로세를 바인드/언바인드
  • pset_create(2) 프로세서 셋을 셋팅
  • pbind(1) psrset(1) 은 커맨드 라인 인터페이스를 제공

완벽한 설명을 위해 ps(1) 커맨드의 리눅스, 솔라리스 에서의 출력이 Threads 섹션에 기록되어 있습니다.

리눅스와 솔라리스 시스템에서 모든 형태의 exec 시스템 콜은 execve(2) 를 결과적으로 호출 하도록 되어 있습니다. 솔라리스 문서는 같은 맨 페이지에 6가지의 exec(2) 종류를 제공하고 있습니다. 리눅스의 exec(3) 맨 페이지에서는 execv, execl, execle, execlp, 그리고 execvp 가 기록되어 있스빈다. 분리된 페이지로 execve(2) 를 다루고 있습니다.

/proc 파일 시스템은 리눅스와 솔라리스 상에서 약간 상이 합니다. 두개의 시스템에서 모두 /proc 는 현재 시스템에서 동작하고 있는 프로세스들의 ID들을 파일 이름으로 가지고 있는 파일들을 포함 합니다. 각 PID 로 명명된 파일들은 디렉토리가 됩니다. 리눅스의 /proc 는 다양한 다른 프로세스 이름과 더불어 다양한 다른 이름의 디렉토리들을 포함합니다. 이러한 것들의 대부분은 프로세서, 디바이스, 시스템 통계를 다루고 있습니다. 리눅스에서 사용자는/proc 을 통해 프로세스, 프로세서, 디바이스, 메인 아키텍쳐 등의 정보를 얻습니다. 솔라리스에는 이러한 종류의 정보를 보통 커맨드를 통해 얻습니다. 예를 들어 prtconf(1) 는 솔라리스의 머신 설정 정보를 얻는데 사용될 수 있습니다. 리눅스에서는 /proc 에 존재하는 파일을 조사 함으로써 정보를 얻습니다.

솔라리스에서 프로세스가 사용하는 가상 주소 공간에 대한 정보는 pmap(1) 을 사용하여 얻을 수 있고 리눅스에서는 /proc/pid/maps 파일을 봄으로써 얻을 수 있습니다. 솔라리스의 pmap(1) 과 리눅스의 proc(5) 맨페이지를 참고 하시기 바랍니다.

<-- on solaris, address space of this instance of bash -->
bash-3.00$ pmap -x $$  
1043:    /usr/bin/bash -i
 Address  Kbytes     RSS    Anon  Locked Mode   Mapped File
08045000      12      12       4       - rw---    [ stack ]
08050000     528     468       -       - r-x--  bash
080E3000      76      72       8       - rwx--  bash
080F6000     124     108      40       - rwx--    [ heap ]
FED8E000       4       4       -       - rwxs-    [ anon ]
FEDA0000       4       4       -       - rwx--    [ anon ]
FEDB0000     760     660       -       - r-x--  libc.so.1
FEE7E000      24      24       8       - rw---  libc.so.1
FEE84000       8       8       -       - rw---  libc.so.1
FEE90000      24       8       4       - rwx--    [ anon ]
FEEA0000     524     324       -       - r-x--  libnsl.so.1
FEF33000      20      20       4       - rw---  libnsl.so.1
FEF38000      32       -       -       - rw---  libnsl.so.1
FEF50000      44      40       -       - r-x--  libsocket.so.1
FEF6B000       4       4       -       - rw---  libsocket.so.1
FEF70000       4       4       4       - rwx--    [ anon ]
FEF80000     144     132       -       - r-x--  libcurses.so.1
FEFB4000      28      24       -       - rw---  libcurses.so.1
FEFBB000       8       -       -       - rw---  libcurses.so.1
FEFC0000       4       4       -       - r-x--  libdl.so.1
FEFC7000     140     140       -       - r-x--  ld.so.1
FEFFA000       4       4       4       - rwx--  ld.so.1
FEFFB000       8       8       4       - rwx--  ld.so.1
-------- ------- ------- ------- -------
total Kb    2528    2072      80       -
bash-3.00$ 

리눅스에서 동일한 정보는 아래의 그림 1 을 참고 바랍니다. 알아둘 점은 리눅스는 라이브러리의 완전한 경로 이름을 보여 준다는 것입니다.(결과는 라이브러리 이름을 보여주기 위해 약간 수정 되었음) 솔라리스에서 라이브러리의 완전한 경로 이름을 얻기 위해서는 pldd(1)를 사용합니다 .

 
사용자 삽입 이미지
그림 1: 리눅스에서 프로세스에 의해 사용된 가상 공간 주소를 검사


쓰레드

리눅스와 솔라리스는 POISIX 쓰레드를 지원 합니다. 리눅스는 The Native POSIX Thread Library for Linux 를 통해서 솔라리스는 표준 C 라이브러리의 일부로 제공하고 있습니다. Multithreaded Programming Guide 에 특별히 Chapter 5 Programming with the Solaris Software,를 참고하시기 바랍니다. Multithreading in the Solaris Operating Environment 문서도 추천할 만 합니다.

POSIC 쓰레드에 덧붙여서 솔라리스는 "솔라리스 쓰레드"를 제공합니다. threads(5) 맨 페이지는 POSIX 쓰레드 라이브러와 솔라리스 쓰레드 라이브러리의 유사점과 차이점에 대해 설명하고 있습니다. 구현은 상호 운용이 가능하고 동일한 어플리케이션에서 조금의 주의를 기울이면 같이 사용할 수 있습니다. 다음의 내용은 맨 페이지에서 바로 가져온 것입니다.

동일점

libpthread 와 libthread 라이브러리에 존재하는 대부분의 함수들은 각각의 라이브러리에 동일한 역할을 하는 함수를 가지고 있습니다. 세마포어 이름을 제외한 POSIX 함수의 이름은 "pthread" 프리픽스를 가지고 있습니다. POSIX와 솔라리스의 비슷한 함수 들은 유사한 끝부분을 가지고 있습니다. 전형적으로 POSIX 함수와 솔라리스 함수들은 같은 숫자의 인수들을 가지고 있습니다.

차이점
  • POSIX 쓰레드가 좀더 포팅이 용이 합니다.
  • POSIX 쓰레드는 설정이 가능한 속성 오브젝트에 따라 각 쓰레드에 특성을 가진 쓰레드를 만드는 것이 가능합니다.
  • POSIX 쓰레드는 쓰레드 취소를 구현하고 있습니다.
  • POSIX 쓰레드는 스케쥴링 알고리즘을 준수하고 있습니다.
  • POSIX pthreads 는 fork(2) 콜을 위한 클린-업 핸들러를 허용하고 있습니다.
  • 솔라리스 쓰레드는 중지/재개가 가능합니다.
  • 솔라리스 쓰레드는 견고한 뮤텍스 락을 가진 인터프로세스를 구현하고 있습니다.
  • 솔라리스 쓰레드는 데몬 쓰레드를 구현하여 프로세스를 종료할때 대기하지 않아도 됩니다.

아래의 프로그램은 간단한 멀티 쓰레드 프로그램입니다. 각 OS 에서 멀티 쓰레드 어플리케이션이 동작하는데에는 큰 차이가 없음을 알 수 있습니다. 물론 바닥에 있는 구현방법에는 몇가지 차이점이 있을 것입니다.

#include <pthread.h>
#include <stdio.h>

void *fcn(void *);

int
main(int argc, char *argv[])
{
    pthread_t tid;

    pthread_create(&tid, NULL, fcn, NULL);
    (void) printf("main thread id = %x\n", pthread_self());
    pthread_join(tid, NULL);
}

void *
fcn(void *arg)
{
    printf("new thread id = %x\n", pthread_self());
}

다음을 이용해서 솔라리스 플랫폼에서 프로그램을 컴파일 하고 수행 시킵니다:

bash-3.00$ cc simplepthread.c -o simplepthread
bash-3.00$ ./simplepthread
main thread id = 1
new thread id = 2
bash-3.00$ 

솔라리스에서 gcc 를 사용 하면 똑같은 결과를 얻을 수 있을 것입니다. 리눅스에서는 다음과 같이 나타 납니다:

max@linux:~/source> cc simplepthread.c
/tmp/cc8u7kZs.o(.text+0x1e): In function `main':
simplepthread.c: undefined reference to `pthread_create'
/tmp/cc8u7kZs.o(.text+0x4a):simplepthread.c: undefined reference
       to `pthread_join'
collect2: ld returned 1 exit status
max@linux:~/source> cc simplepthread.c -lpthread -o simplepthread
max@linux:~/source> ./simplepthread
main thread id = 4015c6c0
new thread id = 4035cbb0
max@linux:~/source> 

리눅스에서 POSIX 쓰레드 라이브러니는 반드시 명시적으로 링크되어야 합니다. 알아둘 점은 솔라리스 9 혹은 그 전에 버젼 역시 명시적으로 링크되어야 한다는 것입니다. 솔라리스10에서 POSIX 쓰레드는 표준 C 라이브러리에 존재 합니다. (libc.so). 또 한가지 알아 둘 점은 솔라리스는 1부터 꾸준히 증가하는 숫자를 쓰레드 ID로 지정 한다는 것입니다. 리눅스는 pthread 구조체의 사용자영역 가상 주소를 사용 합니다(구조체는 내부적으로 쓰레드 라이브러리에서 사용됨).

쓰레드는 두 시스템 모두에서 ps(1) 커맨드 혹은 /proc 파일 시스템을 통해 보여질 수 있습니다. 그림 2는 솔라리스의 ps(1) 커맨드 출력을 나타 내고 그림 3은 리눅스에서의 출력을 나타 냅니다. 여기서 알 수 있는 것은 똑같은 옵션을 주었을때 두 머신에서의 출력은 유사 하다는 것입니다.

사용자 삽입 이미지
그림 2: 솔라리스에서의 ps(1) 커맨드 출력


 
사용자 삽입 이미지
그림 3: 리눅스에서의 ps(1) 커맨드 출력


이 커맨드는 상태, 유저, PID, 부모 PID, LWP ID, LWP의 숫자 (유저 프로세스를 위한 숫자. 이것은 쓰레드의 숫자를 의미함), 스케줄링 클래스, 스케줄링 우선순위, 유저영역 가상 사이즈, 대기 채널, 시작 시간, tty, 수행 시간, 그리고 커맨드등을 보여 줍니다. 리눅스 ADDR 를 리포트 하지 않습니다. 그리고 솔라리스는 커널이 프로세스를 유지하는데 사용하는 proc_t 자료 구조의 (커널) 가상 어드레스를 보여 줍니다. 리눅스는 WCHAN 을 심볼로 보여 주고 솔라리스는 그것을 주소로 보여 줍니다. 솔라리스에서 WCHAN 컬럼은 쓰레드가 블록됐을때 동기화 변수의 주소를 나타 냅니다. 리눅스에서 WCHAN 은 쓰레드가 sleep 상태 일때의 루틴을 나타냅니다. 솔라리스에서 똑같은 정보를 얻기 위해서는 mdb -k에서 ::threadlist -v 를 입력 합니다.

알아둘점은 64-비트 커널이 돌아가는 머신(SPARC 혹은 AMD64 아키텍쳐) 에서 ADDR WCHAN 필드는 물음표를 나타낼 것입니다. 이 두 변수의 값을 보기 위해서는 ps -e -o addr,wchan,comm 을 입력합니다.

보통 사용자는 어플리케이션 쓰레드가 무엇을 하는지에 대해 관심이 많을 것입니다. 이럴때에는 pstack(1) 을 이용 합니다. 리눅스에서는 pstack 을 이용합니다. 그러나 반드시 이것은 다운로드 받아져야 합니다. http://rpmfind.net/linux/RPM/ 를 참조 바랍니다. 주의할 점은 이것은 오직 하나의 쓰레드의 백트레이스 스택 많을 제공 한다는 것입니다(쓰레드 ID가 인수의 하나로 넘겨짐) 만약 모든 쓰레드의 백트레이스를 원한다면 쓰레드 ID를 하나의 분리된 인수로 넘겨 주어야 합니다.

 <-- get user-level stack(s) of a process on Solaris -->
bash-3.00$ pstack `pgrep mozilla-bin` 
21528: /usr/sfw/bin/../lib/mozilla/mozilla-bin -UILocale en-US
-----------------  lwp# 1 / thread# 1  --------------------
 fef68967 pollsys  (896dac8, 9, 0, 0)
 fef2b2aa poll     (896dac8, 9, ffffffff) + 52
 fe793242 g_main_context_iterate () + 39d
-----------------  lwp# 2 / thread# 2  --------------------
 fef68967 pollsys  (fbf5bd04, 1, 0, 0)
 fef2b2aa poll     (fbf5bd04, 1, ffffffff) + 52
 fede047d _pr_poll_with_poll (816fa0c, 1, ffffffff, fbf5bf64,
                                 fc0558aa, 816fa0c) + 2d5
 fede05f1 PR_Poll  (816fa0c, 1, ffffffff) + 11
 fc0558aa __1cYnsSocketTransportServiceEPoll6M_i_ (816f6b8) + 58
 fc055f7d __1cYnsSocketTransportServiceDRun6M_I_ (816f6b8) + 18f
 fc3d1262 __1cInsThreadEMain6Fpv_v_ (816eb60) + 32
 fede1693 _pt_root (816fcc0) + 9e
 fef67b30 _thr_setup (feec2400) + 51
 fef67f40 _lwp_start (feec2400, 0, 0, 0, 0, 0)
-----------------  lwp# 4 / thread# 4  --------------------
 fef67f7b lwp_park (0, fa87deb8, 0)
 fef620bb cond_wait_queue (825cfec, 816b8d0, fa87deb8, 0) + 3e
 fef62462 cond_wait_common (825cfec, 816b8d0, fa87deb8) + 1e9
 fef62691 _cond_timedwait (825cfec, 816b8d0, fa87df38) + 4a
 fef62722 cond_timedwait (825cfec, 816b8d0, fa87df38) + 27
 fef62761 pthread_cond_timedwait (825cfec, 816b8d0,
                                    fa87df38) + 21
 feddc598 pt_TimedWait (825cfec, 816b8d0, f1c) + b8
 feddc767 PR_WaitCondVar (825cfe8, f1c) + 64
 fc3d417e __1cLTimerThreadDRun6M_I_ (81e5108) + 16e
 fc3d1262 __1cInsThreadEMain6Fpv_v_ (820d690) + 32
 fede1693 _pt_root (820e6b0) + 9e
 fef67b30 _thr_setup (fb520400) + 51
 fef67f40 _lwp_start (fb520400, 0, 0, 0, 0, 0)
bash-3.00$ 

리눅스에서의 동일한 결과가 아래에 있습니다. 흥미로운 것은 Mozilla나 xemacs 같은 프로그램은 리눅스에서 strip 되 있고 솔라리스에서는 strip 되있지 않습니다.

max@linux:~> cd /proc/`pgrep mozilla`/task
max@linux:/proc/3991/task> pstack *

3991: /opt/mozilla/lib/mozilla-bin
(No symbols found)
0xffffe410: ???? (8803488, 8, ffffffff, 8803488, 9, 400fbea0) + 40
0x404b0a6d: ???? (8129258, 4035236c, 57f, 4011e4e6, 4048de14,
                   403513c4) + 20
0x404b0d07: ???? (814b898, 814b898, 0, 0, 415a8f64, 814b898) + 30
0x401dc11f: ???? (8106350, bfffee80, bfffede8, 807673e, 8084cf4, 0)
0x415c4006: ???? (8106350, 0)
0x414fbae4: ???? (8105ee8, 0, 8079c2c, bfffee90, 80a67b8,
                      40ad841c) + 1f0
0x08059b7c: ???? (80e7f08, bffff058, 40017068, 14, 4081ccf8,
                       1) + 90
0x08055a47: ???? (1, bffff134, bffff13c, 4081ccf8, 406eebd0,
                     400168c0) + 40
0x405f2500: ???? (8055840, 1, bffff134, 80557b0, 8055740, 
                     4000d330) + 40000ed8

4001: /opt/mozilla/lib/mozilla-bin
(No symbols found)
0xffffe410: ???? (413eb7f0, 1, ffffffff, 18, 413eb7f8, 0) + 230
0x400c7439: ???? (818911c, 1, ffffffff, 40c5a0a8, ffffffff,
                   8188dec)
0x40bc8a52: ???? (8188dc8, 8188df4, 1, 8188dec, 8188f7c, 1) + 10
0x40bc8bcb: ???? (8188dc8, 413ebbb0, 40102ce0, 400d5238,
                   8189478, 0)
0x40a8da6b: ???? (81893f8, 8189478, 4000ca40, 40102be8, 0, 0)
0x400cb7a6: ???? (8189478, 413ebac4, 0, 0, 0, 0) + 54
0x400fa9dd: ???? (413ebbb0, 0, 0, 0, 0, 0) + bec144d4

4004: /opt/mozilla/lib/mozilla-bin
(No symbols found)
0xffffe410: ???? (40656756, 400d5238, 81ed160, 81ed2d0, 41ffba08,
                   400c5721) + 170fd55
crawl: Input/output error
Error tracing through process 4004
0x1afcdbf8: ????max@linux:/proc/3991/task> 

솔라리스 쓰레드는 기본적으로 유저 스택 사이즈를 1MB로 지정 합니다. 리눅스에서는 2MB 입니다.(수세 9.1)

동기화

두 운영체제는 POSIX 동기화 메카니즘을 지원합니다(예: 뮤텍스, 조건 변수, 읽기/쓰기 락, 세마포어, 베리어등) 기본적으로 메카니즘은 뮤텍스에 바탕을 두고 있습니다. 솔라리스에서 사용자-레벨의 뮤텍스는 "adaptive" 스핀 락을 사용해서 구현 됩니다. 리눅스에서 메카니즘은 "futex" 혹은 fast user level mutex 입니다. 두 메카니즘 모두 비경합 조건에서 커널에 들어가는 것을 회피 하고 반드시 비교할수 있을 만한 성능과 동작을 제공해야 합니다.

솔라리스 사용자-레벨의 "adaptive" 스핀 뮤텍스는 Multithreading in the the Solaris Operating Environment (pdf) 에 자세한 설명이 있습니다. 리눅스의 futex는 Futexes Are Tricky (pdf) 에 자세한 설명이 있습니다.

솔라리스 메카니즘인 lwp_park() lwp_unpark() 그리고 리눅스 메카니즘인 futex_up() futex_down() 은 어플리케이션에서 사용될 수 있습니다. 그러나 필자는 어떠한 소스 코드 예제도 찾지 못했습니다. 아마도 POSIX API들을 사용 하는 것이 가장 좋을 것입니다. 만약 POSIX 라킹 메카니즘에 상대적인 속도 차이를 비교하고자 한다면 (혹은 다양한 다른 라이브러리 루틴, 시스템 콜의 성능 같은) 필자는 libmicro 마이크로 벤치마크의 카피를 얻을 것을 관장하고 그것을 솔라리스와 리눅스에서 사용해 보길 권장 합니다. (libmicro는 여기 에서 다운로드 받으실 수 있습니다)

메모리 관리

커널의 메모리 다루는 방법에 대한 차이를 설명하는 대신 필자는 유저 레벨에서 몇가지 다른 메모리 할당 라이브러리가 존재 하고 대부분 두 OS 에서 사용 할 수 있음 만을 밝히려고 합니다. 유저레벨 메모리 할당자의 비교는 SDN의 A Comparison of Memory Allocators in Multiprocessors 에서 찾아 보실 수 있습니다. http://gee.cs.oswego.edu/dl/html/malloc.html 에 "A Memory Allocator" 는 리눅스에서 사용되는 (조금 지난) 메모리 할당자들에 대한 설명을 포함 하고 있습니다. 또한 소스 코드에서도 관련 커멘트를 찾아 볼 수 있습니다.

타이머

어플리케이션 레벨에서 솔라리스와 리눅스는 둘다 timer_create(), timer_delete(), 그리고 nanosleep() 를 포함한 POSIX 타이머 루틴을 제공합니다. 솔라리스는 추가적으로 CLOCK_HIGHRES 라는 타이머를 제공하며 이것은 최적의 하드웨어 소스를 사용하도록 시도 하고 nano 초 수준의 정밀함을 제공 할 것입니다. CLOCK_HIGH_RES 타이머는 아마 미슷한 수준의 정밀성을 리눅스에서 제공할 것입니다. 그러나 커널 패치의 일부로 설치 되어야 합니다.(http://high-res-timers.sourceforge.net/ 에서 고 정밀도 타이머 프로젝트의 홈페이지를 찾으실 수 있습니다). 다음의 예제 코드는 CLOCK_HIGHRES 타이머를 사용하여 유저가 지정한 간격, 유저가 지정한 시간 동안 타이머가 동작 하도록 합니다. 간격은 nano 초 수준으로 지정 되고 동작 시간은 초 수준으로 지정 됩니다. 프로그램이 실행을 완료 하면 타이머가 몇번 동작 했는지와 타이머가 "overrun" 했는지 숫자로 보여 줍니다. 여기서 "overrun" 값이란 타이머가 처음 동작한 시간(시그널이 생성되도록 함)과 시그널이 처리되는 시간 (timer_getoverrun(3RT) 참조) 과의 차이를 의미 합니다. 간격을 너무 짧게 줄 경우 시스템이 정지해 버릴 수도 있습니다.

#include <pthread.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <time.h>

#include <errno.h>

#define DURATION 120    /* default time to run in seconds */

  /* default .5 seconds in nanosecs */
#define INTERVAL (1000*1000*500)

void* timer_fcn(void* arg);
void* signaler_thd(void* arg);

/* Program globals */
extern int errno;
int duration = DURATION;
int interval = INTERVAL;

int
main(int argc, char *argv[]) 
{
   sigset_t mask;
   pthread_t wtid = 0;
   pthread_t stid = 0;
   int rval;
   int n;

   if (argc >=2) {
       errno = 0;
       if (argc == 2)
         duration = strtol(argv[1], NULL, 0);
       else if (argc == 3) {
         interval = strtol(argv[1], NULL, 0);
         duration = strtol(argv[2], NULL, 0);
       }
       if (errno || argc > 3 || interval <= 0
          || duration <= 0) {
           fprintf(stderr, "Usage: %s [[interval] duration]\n",
                  argv[0]);
           fprintf(stderr, "interval nsecs, duration seconds\n");
           exit(1);
       }
   }
     
   /* mask SIGALRM signals */
   sigemptyset(&mask);
   sigaddset(&mask, SIGALRM);
   sigaddset(&mask, SIGUSR1);
   rval = pthread_sigmask(SIG_BLOCK, &mask, NULL);
   if(rval != 0) {
      printf("%s: pthread_sigmask failed, errno = %d.\n",
             argv[0], rval);
      exit(1);
   }

   rval = pthread_create(&wtid, NULL, timer_fcn, NULL);
   if (rval != 0) {  /* Waiter create call create failed */
    perror ("Waiter create");
    printf ("Waiter create call failed: %d.\n", rval);
    exit (1);
    }


   /* Do signaler thread */
   rval = pthread_create(&stid, NULL, signaler_thd, &mask);
   if (rval != 0) {  /* Signaler call create failed */
    printf ("Signaler call create failed: %d.\n", rval);
    exit (1);
   }

   /* Wait for waiter and signaler to finish */    
   rval = pthread_join(stid, NULL);
   if (rval != 0) {  /* Signaler call join failed */
    printf ("Signaler call join failed: %d.\n", rval);
    exit (1);
   }

   rval = pthread_join(wtid, NULL);
   if (rval != 0) {  /* Waiter call join failed */
    printf ("Waiter call join failed: %d.\n", rval);
    exit (1);
   }

   printf("done\n");
   exit(0);
}

pthread_mutex_t mp;
pthread_cond_t cv;
int time_expired = 0;
int timerentered;
int timeroverrun;
timer_t itimerid;

void *
timer_fcn(void *arg)
{
  struct itimerspec value;
  struct sigevent event;

  value.it_interval.tv_sec = 0;
  value.it_interval.tv_nsec = interval;  /* nsec intervals  */
  value.it_value.tv_sec = 1;  /* starting in 1 second */
  value.it_value.tv_nsec = 0;  /* plus 0 nanosecs */

  event.sigev_notify = SIGEV_SIGNAL;
  event.sigev_signo = SIGALRM;
  event.sigev_value.sival_int = 0;
  

  if (timer_create(CLOCK_HIGHRES, &event,
     &itimerid) == -1) {
       perror("timer_create failed");
       exit(1);
  }

  /* the second arg can be set to TIMER_ABSTIME */
  if (timer_settime(itimerid, 0, &value, NULL) == -1) {
      /* else time value is relative to when the call is made */
    perror("timer_settime failed");
    exit(1);
  }

  pthread_mutex_lock(&mp);
  while (time_expired == 0)
    pthread_cond_wait(&cv, &mp);
  printf("timerentered = %d\n", timerentered);
  printf("timeroverrun = %d\n", timeroverrun);
  pthread_mutex_unlock(&mp);
  exit(0);
}

int timerset;

void *
signaler_thd(void *arg)
{
    int signo;
    
    while (1) {
      signo = sigwait(arg);
      if (signo == SIGALRM) {
       if (!timerset) {
        struct itimerspec value;
        struct sigevent event;

        timer_t endtimerid;

        ++timerset;
        value.it_interval.tv_sec = 0;
        value.it_interval.tv_nsec = 0;
        value.it_value.tv_sec = duration; /*wait duration secs*/
        value.it_value.tv_nsec = 0;  /* plus 0 nanosecs */

        event.sigev_notify = SIGEV_SIGNAL;
        event.sigev_signo = SIGUSR1;
        event.sigev_value.sival_int = 0;
  

        if (timer_create(CLOCK_HIGHRES, &event,
         &endtimerid) == -1) {
           perror("timer_create failed");
           exit(1);
        }

        /* the second arg can be set to TIMER_ABSTIME */
        if (timer_settime(endtimerid, 0, &value, NULL)
          == -1) {
          perror("timer_settime failed");
          exit(1);
        }
       } else {  /* if (!timerset) */
        ++timerentered;
        timeroverrun += timer_getoverrun(itimerid);
       }
      } else {  /* SIGUSR1 */

       struct itimerspec value;
       struct sigevent event;


       /* cancel the interval timer */
       value.it_interval.tv_sec = 0;
       value.it_interval.tv_nsec = 0;  /* nanosecond intervals */
       /* setting the following to 0 should stop the timer */
       value.it_value.tv_sec = 0;
       value.it_value.tv_nsec = 0;  /* plus 0 nanosecs */

       event.sigev_notify = SIGEV_SIGNAL;
       event.sigev_signo = SIGALRM;
       event.sigev_value.sival_int = 0;
  
       pthread_mutex_lock(&mp);
       if (timer_settime(itimerid, 0, &value, NULL) == -1) {
        perror("timer_settime failed");
        exit(1);
       }

       ++time_expired;
       pthread_cond_signal(&cv);
       pthread_mutex_unlock(&mp);
      }
   }
}

컴파일 된 코드의 실행 예가 있습니다.

  <-- realtime library and best optimization -->
bash-3.00$ cc timerex1.c -lrt -o timerex1 -O -fast
bash-3.00$ ./timerex1  <-- only root can use high res timer
timer_create failed: Not owner
bash-3.00$ su
Password: 
  <-- default interval is .5 seconds, duration is 120 seconds -->
# ./timerex1  
timerentered = 240  <-- timer fired every .5 seconds
timeroverrun = 0
# ./timerex1 1000000 10  <-- interval is 1 msec for 10 secs
timerentered = 9912
timeroverrun = 88
# priocntl -e -c RT ./timerex1 1000000 10  <-- run it real time
timerentered = 10000  <-- timer fired once each msec for 10 secs
timeroverrun = 0
# ./timerex1 100000 10  <-- interval is 100 usecs for 10 seconds
timerentered = 99615  <-- we missed a few
timeroverrun = 386
# priocntl -e -c RT ./timerex1 100000 10  <-- try real time 
timerentered = 99871  <-- almost 1 every 100 microseconds
timeroverrun = 129
# ./timerex1 10000 10  <-- interval is 10 microseconds
timerentered = 485905  <-- here we miss over half
timeroverrun = 514125  <-- (sig handler takes > 10 usecs?)
 <-- using RT 1 usec interval causes hang on my machine -->

# priocntl -e -c RT ./timerex1 1000 10 

IPC

솔라리스와 리눅스 둘다 시스템 V IPC (공유 메모리, 메세지 큐, 세마포어)를 지원 합니다. 두 시스템 모두 파이프와 실 시간 공유 메모리 작업(shm_open(), shm_unlink(), 등등)을 지원합니다. 두 시스템 모두 tmpfs 파일 시스템을 지원합니다(파일을 위해 메모리와 스왑 공간을 사용) 솔라리스는 tmpfs 내에 /tmp, /var/run, 그리고 /etc/svc/volatile 을 위치 시킵니다 리눅스는 /dev/shm 을 사용합니다. 두 시스템 모두 다른 마운트 지점을 추가 하는 것을 허용 합니다.

솔라리스에서 tmpfs 를 사용 하는 과정이 설명 되어 있습니다; 리눅스를 위한 과정은 아래에 설명 됩니다. 알아둘 점은 솔라리스의 "swap"은 메모리와 디스크를 둘다 사용 합니다. (디스크는 필요시에만) 다시 말해서 /tmp 파일에 생성되는 파일은 메모리에 저장 됩니다. 메모리가 꽉 찰 경우 pageout 데몬이 /tmp 에서 데이타를 디스크에 스왑 스페이스 옮기게 됩니다.

# mkdir /foo
<-- create a tmpfs file system using swap on /foo
# mount -F tmpfs swap /foo  
# df -h /foo
Filesystem         size   used  avail capacity  Mounted on
swap           652M     0K   652M     0%    /foo
# df -h /tmp
Filesystem         size   used  avail capacity  Mounted on
swap           652M    52K   652M     1%    /tmp
# 

아래에 리눅스상에서 비슷한 과정을 설명합니다.

linux:/home/max # mkdir /foo
 <-- tmpfs also uses swap space and memory -->
linux:/home/max # mount tmpfs /foo -t tmpfs 
linux:/home/max # df -h /foo
Filesystem        Size  Used Avail Use% Mounted on
tmpfs         248M     0  248M   0% /foo
linux:/home/max # df -h /dev/shm
Filesystem        Size  Used Avail Use% Mounted on
tmpfs         248M   16K  248M   1% /dev/shm
linux:/home/max # 

이 글의 앞부분에서 언급한대로 libmicro 벤치마크를 수행하여 두 시스템의 상대적인 성능을 비교해 보는 것은 꽤 흥미로울 것입니다.

시그널 핸들링

솔라리스와 리눅스는 시그널을 비슷하게 처리 합니다. 솔라리스에 존재하는 몇몇 시그널은 리눅스에 존재 하지 않고 그 반대도 마찬가지 ?니다. 또한 몇몇 시그널은 다른 시그널 번호를 사용 합니다. 두가지 모두 signal() 위에 sigaction(2) 을 사용하여 시그널을 캐치 하고 멀티 쓰레드 어플리케이션에서 sigwait() 를 사용 하여 비동기 시그널을 처리 합니다. 리눅스에서 sigwait(3) 메뉴얼 페이지는 BUGS 섹션을 가지고 있습니다. 리눅스 시그널 핸들링은 POSIX 표준과는 다릅니다. POSIX에서 비동기 적으로 전달 되는 시그널(프로세스외 외부적으로 전달 되는 시그널)은 현재 블럭된 시그널을 가지고 있지 않는 모든 쓰레드에 의해 처리 됩니다. 리눅스에서 비동기 시그널은 어떤 특정한 쓰레드(시그널은 kill(1)을 통해 특정 쓰레드로 전달될 수 있음)에 전달 됩니다. 솔라리스는 이 경우 POSIX 표준을 구현 합니다. 즉 프로세스의 특정한 쓰레드에 직접적으로 시그널을 전달 할 수 있는 방법은 없습니다. 하나의 방법으로는 프로세스에 특정한 쓰레드로가 아니라 kill(1) 을 통해 프로세스로 전달 하는 것이 있습니다.

http://lsbbook.gforge.freestandards.org/sig-handling.html 에 있는 "Building Applications with the Linux Standard Base"는 몇가지 이러한 차이점들을 기술 하고 있습니다. 주의할 점은 이 페이지는 완벽하게 정확하지는 않다는 것입니다. 예를 들어 이 페이지에서 리눅스에서는 "버스 에러"가 없다는 것을 나타내기 위해 SIGBUSSIGUNUSED 로 지정한다고 설명되어 있습니다. 리눅스의 mmap(2) 맨 페이지에서 설명하고 있는 바로는 mmap 이 사용 되었단 파일에서의 올바른 위치와 부응하지 않는 메모리 범위를 엑세스 할때 SIGBUS 를 받게 된다고 되어 있습니다. (솔라리스도 똑같이 동작함).

솔라리스와 리눅스 두 OS 모두 시그널은 커널에서 유저 모드로 쓰레드가 돌아갈때 pending 된 시그널이 발견 되었을 시에 처리 됩니다. 두 시스템 모두 SIGKILLSIGSTOP 은 다른 시그널에 비교해서 우선순위가 높습니다. 그렇지 않다면 솔라리스에서 시그널은 문서화되지 않은 순서대로 처리 됩니다(낮은 시그널 숫자가 먼저 처리 됨). 리눅스에서 시그널은 전달된 순서대로 처리 됩니다. (SIGKILLSIGSTOP 은 예외).

솔라리스에서 수행중인 프로세스의 시그널 설정을 보기 위해서는 psig 를 사용합니다.

bash-3.00$ psig $$  <-- signal disp for current shell
954:	/usr/bin/bash -i
HUP	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
INT	caught	sigint_sighandler	0
QUIT	ignored
ILL	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
TRAP	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
ABRT	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
EMT	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
FPE	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
KILL	default
BUS	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
SEGV	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
SYS	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
PIPE	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
ALRM	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
TERM	ignored
USR1	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
USR2	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
CLD	blocked,caught	0x807d4d7 	0
PWR	default
WINCH	caught	0x807e182   0  <-- not all syms are present
URG	default
POLL	default
STOP	default
TSTP	ignored
CONT	default
TTIN	ignored
TTOU	ignored
VTALRM	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
PROF	default
XCPU	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
XFSZ	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
WAITING	default
LWP	default
FREEZE	default
THAW	default
CANCEL	default
LOST	caught	termination_unwind_protect	0	HUP,INT,
  ILL,TRAP,ABRT,EMT,FPE,BUS,SEGV,SYS,PIPE,ALRM,TERM,USR1,USR2,
  VTALRM,XCPU,XFSZ,LOST
XRES	default
JVM1	default
JVM2	default
RTMIN	default
RTMIN+1	default
RTMIN+2	default
RTMIN+3	default
RTMAX-3	default
RTMAX-2	default
RTMAX-1	default
RTMAX	default
bash-3.00$ 

필자가 얘기 할 수 있는 것은 리눅스에서 이러한 작업을 쉽게 할 수 있는 방법은 없습니다. 그러나 몇몇 개발자들이 아마 커널 패치/모듈을 구현 해서 개발자가 정보를 얻을 수 있도록 했습니다.

결론

일반적으로 리눅스 혹은 솔라리스에서 개발자가 POSIX-호환의 어플리케이션을 개발 하고 있다면 어플리케인션 반드시 간단한 재컴파일 과정을 통해 각 OS로 포팅 되어야 합니다. 물론 많은 어플리케이션은 POSIX 와 부합하지 않는 부분을 가지고 있습니다. 예를 들어 디바이스ioctl(2) 은 OS에 따라 다르게 되어 있습니다.(그리고 물론 디바이스에 따라)

솔라리스를 위한 문서를 얻는 것은 이성적으로 매우 직관적입니다. 왜냐하면 모든 문서가 http://docs.sun.com에 존재하기 때문입니다. 물론 리눅스를 위한 문서를 얻는 과정도 간단하지만 (웹검색을 통해) 종종 어려울 경우도 있습니다. 개발자는 리눅스가 전형적으로 동일한 작업을 하기 위해 많은 방법이 있음을 발견하게 될 것입니다.(예를 들어 쓰레드의 구현 차이 등) 필자의 개인적은 인상은 리눅스의 문서는 종종 소스 코드 자체가 될 수도 있습니다. 만약 소스 코드에 대한 전체 접근이 가능할 경우 이것은 괜찮은 방법입니다. 개발자는 모든 소스 코드에 대한 접근 권한을 물론 가지고 있지만 이것이 한 장소에 모여 있지는 않습니다. 사실 그것은 여러군데에 퍼져 있는 것처럼 보입니다. 썬의 소스는 현재 (http://www.opensolaris.org) 한군데에 모여 있습니다.

이 글은 두 시스템에서 사용 가능한 툴을 모두 사용하였지만 자세한 부분 까지 파고 들지는 않았습니다. 썬이 오픈솔라리스로 전환하기 전에 리눅스의 발표는 소스 코드에 대한 가시성 면에서 봤을때 항상 어떻게 작업이 돌아 가는지 알 수 있도록 소스 코드가 항상 공개 되있으므로 솔라리스에 비해 한발짝 앞서 있었습니다. 이제는 오픈솔라리스의 DTrace 같은 툴을 통해 리눅스가 솔라리스를 따라와야 하는 상황입니다. 리눅스의 변화 속도를 볼때 필자가 확신 할 수는 없지만 그 시간이 오래 걸리지는 않을 것입니다. 필자는 각 시스템의 서로의 장점과 실수를 배움으로써 상호 보완관계로 발전하기를 바랍니다.

출처 : SDN Korea

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
Posted by 소리나는연탄.

Leave your greetings here.

  
  
  
  
  
  
  
  
 

Windows XP Tip

2007/07/18 07:51 / Resource
1. 여러 파일 이름을 한꺼번에 바꾸자
윈도우즈 XP는 여러 개의 파일 이름을 한꺼번에 바꾸는 재주가 있다. 파일 형식이 서로 달라도 같은 이름을 붙일 수 있다. 이름을 바꿀 파일을 모두 고르고 마우스 오른쪽 버튼을 누른 다음 ‘이름 바꾸기’를 고른다.

윈도우즈 XP에서 여러 개의 파일 이름을 바꿀 때는 첫 번째 파일에 이름만 쓴다. 예를 들어 ‘PC사랑’이라고 하면 첫 번째 파일은 ‘PC사랑’이 되고 나머지 파일들은 ‘PC사랑 (1)’ ‘PC사랑 (2)’ 등으로 바뀐다. 만약 첫 번째 파일 이름을 ‘PC사랑 (10)’이라고 하면 그 다음부터는 ‘PC사랑 (11)’ ‘PC사랑 (12)’이 된다.

새 이름을 쓰고 엔터 키를 누른 다음 이름을 바꾼 파일 다음에 있는 것들은 새 이름 뒤에 1부터 숫자가 붙는다.

2. 갑자기 재 부팅 되는 윈도우즈 XP 때려잡기
윈도우즈 XP는 너무 민감한(?) 나머지 프로그램에 조그만 오류가 생기면 저절로 재 부팅 된다. 물론 그 오류가 심각할 때도 있지만 별 문제가 되지 않는 데도 PC를 재 부팅해서 이용자를 귀찮게 한다. 프로그램에 오류가 있어도 시스템이 재 부팅 되지 않게 해보자.

바탕화면의 ‘내 컴퓨터’ 아이콘을 마우스 오른쪽 버튼으로 누르고 ‘속성’을 고른 다음 ‘시스템 등록정보’ 창의 ‘고급’ 탭에서 ‘시작 및 복구’ 칸의 ‘설정’ 버튼을 누른다.
‘시스템 오류’ 칸에 있는 ‘자동으로 다시 시작’의 체크 표시를 없애고 ‘확인’ 버튼을 누른다.

이제 윈도우즈 XP가 제멋대로 꺼지지 않는다.

3. 오류 보고 창 나타나지 않게 하기
윈도우즈 XP부터는 프로그램들이 에러를 일으켰을 때 그에 대한 자세한 사항을 마이크로소프트사로 보고한다. 이런 오류를 매번 보고하는 것도 지겹고, 보고해도 해결되지 않으므로 오류 보고 창이 뜨지 않게 해보자.

시작 → 제어판 → 성능 및 유지 관리 → 시스템으로 간 뒤 시스템 등록정보 창이 뜨면 ‘고급’ 탭에서 아래에 있는 ‘오류 보고’ 단추를 누른다. 오류 보고 대화 상자에서 ‘오류 보고 사용 안 함’을 고르고 ‘확인’ 버튼을 누른다.

4. 성인광고 나가 있어~
성인광고 사이트도 아닌데 자꾸 성인광고가 뜬다. 한두 개 정도야 바로 닫아버리면 그만이지만 여러 개의 창이 마구 쏟아져 나오면 윈도우즈 XP가 먹통이 되기도 한다. 성인광고를 막아주는 프로그램이 있지만, 괜히 하드디스크 용량만 차지하므로 윈도우즈 XP 자체에서 해결하자.
 
인터넷 익스플로러 메뉴에서 도구 → 인터넷 옵션을 고른 다음 ‘일반’ 탭의 임시 인터넷 파일 항목에 있는 ‘설정’ 단추를 누른다. ‘설정’ 창이 뜨면 ‘개체보기’를 누른다.
탐색기가 뜨면서 파일 이름이 나온다. 이 중에서 sender control이라는 파일을 찾아서 지우면 성인광고 사이트가 뜨지 않는다.

‘개체보기’를 누르면 내 PC에 깔려있는 개체들이 보인다.

5. 내 컴퓨터에서 ‘공유 문서’ 없애기
윈도우즈 XP에는 여러 이용자가 같이 쓸 수 있는 공유 문서가 있다. 공유 문서에는 공유 그림, 공유 음악이 있는데 집에서 혼자 쓰는 사람에게는 필요 없다. 용량만 차지하는 공유 문서를 지워보자.
시작 → 실행 → regedit 라고 누르면 레지스트리 편집기를 띄운 다음,

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\DelegateFolders에 있는
{59031a47-3f72-44a7-89c5-5595fe6b30ee}를 찾아 지운다.

이 레지스트리를 지우면 공유 문서가 보이지 않는다.

6. ‘시작’에서 문서메뉴 지우기
문서 메뉴가 있으면 작업 했던 문서를 쉽게 불러올 수 있지만, 길게 늘어져 있어 지저분하다. 문서 메뉴를 잘 쓰지 않는다면 깔끔하게 지우자.

시작 → 실행 → regedit 라고 누르면 레지스트리 편집기가 뜬다.
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer 오른쪽에 마우스를 놓고 새로 만들기 → DWORD 값을 고른 뒤,

‘새 값’의 이름을 NoRecentDocsMenu 라고 바꾼 뒤 마우스로 두 번 눌러 값 ‘1’을 넣는다.
문서 메뉴가 없어졌다. 메뉴가 한결 깔끔해 보인다.

7. 바탕화면에 내 컴퓨터 불러오기
윈도우즈 XP를 깔고 나면 바탕화면에 휴지통만 보인다. 윈도우즈 98처럼 바탕화면에 기본 아이콘이 보이게 하려면 바탕화면에서 오른쪽 마우스 버튼을 누른 뒤 → 속성 → 바탕화면 → 바탕화면 사용자지정을 차례로 누르고 ‘내 바탕화면에 아이콘’에서 골라 누르면 된다.

8. 휴지통을 변기통으로 바꾸자
다른 아이콘들은 이름을 바꿀 수 있지만, 휴지통은 ‘이름 바꾸기’가 없다. 하지만 PC사랑 사전에 불가능이 있던가? 휴지통 변기통으로 변신시키자.
시작 → 실행 → regedit 라고 누르면 레지스트리 편집기가 뜬다.

HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder의 오른쪽 창에 있는 attributes 키를 마우스 오른쪽 단추로 누른 뒤 ‘수정’을 고른다. ‘바이너리 값 편집’ 창의 ‘값의 데이터’ 칸에서 40 01 00 20 대신 70 01 00 20을 집어넣는다.

CallForAttributes=dword:00000040 의 값만 지우자.
재 부팅하고 휴지통 위에서 마우스 오른쪽 버튼을 누르면 ‘이름 바꾸기’가 생긴다.

9. 입력 도구 모음 없애기
윈도우즈 XP ‘서비스 팩이 깔려 있다면 입력 도구 모음을 간단히 닫을 수 있지만 서비스 팩이 없다면 이것을 지울 수 없다. 입력 도구 모음은 한자를 입력할 때 편하지만 게임을 자주 하는 이들에겐 눈에 거슬릴 뿐 아무런 도움을 주지 않는다. 입력 도구를 쓰지 않는다면 이 방법으로 입력도구를 날려버리자.

제어판 → 국가 및 언어 옵션 → 언어 → 자세히 → 설치된 서비스에서 ‘추가’를 눌러 영어를 새로 넣는다. 그 다음 한글 입력기(IME2002)를 고르고 기본 설정 → 입력 도구모음에서 모든 체크를 끄면 도구가 사라진다.

10. 로그 온 할 때 예쁜 메시지 띄우기
회사, 학교 등 네트워크에 연결된 PC를 켜면 ‘로그온’ 화면이 뜬다. 이 곳에 톡톡 튀는 예쁜 메시지를 넣어보자.

시작 → 실행 → regedit 라고 누르면 레지스트리 편집기가 뜬다.
HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon을 찾는다.

오른쪽 창에서 마우스 오른쪽 버튼을 누르면 뜨는 ‘새로 만들기’ 메뉴에서 ‘문자열 값’을 고른 뒤, 문자열 이름을 LegalNoticeText 라고 써 넣고 엔터 키를 누른다. 이미 있는 파일이라면 새로 만들지 않아도 된다.

앞에서 만들어 놓은 문자열을 마우스로 두 번 누르면 ‘문자열 편집’ 대화 상자가 나타난다.
‘값 데이터’ 상자에 화면에 표시할 내용을 써 넣고 ‘확인’ 버튼을 누른다.
같은 방법으로 LegalNoticeCaption 이라는 문자열 값을 만들고 ‘값 데이터’에 메시지 상자의 제목을 적은 뒤 ‘확인’ 버튼을 누른다. PC를 껐다 켜면 메시지 상자가 표시된다.

11. URL 입력은 단축 키로 간단히!
PC사랑 홈페이지에서 지난달 기사를 찾아보고 싶을 때 주소 창에 www.ilovepc.co.kr을 모두 적지 않아도 된다. ilovepc만 쓰고 Ctrl+Enter 키를 누르면 http://www와 co.kr이 저절로 써진다.
.com로 끝나는지, co.kr이나 net으로 끝나는지 기억나지 않을 때 활용하면 편하다.

12. ‘드라이버가 맞지 않는다’는 메시지가 떠요!
윈도우즈 XP의 기본 드라이버를 쓰다가 부품 회사에서 만든 드라이버를 깔려고 하는데 ‘호환성 테스트에 통과하지 못했다’는 메시지가 종종 뜬다. MS가 테스트하지 않아 성능을 믿을 수 없다는 내용이다. 많은 드라이버가 테스트를 거치지 않았지만 쓰는 데는 이상이 없다. 그렇다면 이 메시지를 굳이 띄울 필요가 없다.

‘내 컴퓨터’를 마우스 오른쪽 버튼으로 누르고 ‘속성’을 고른 다음, ‘하드웨어’ 탭에서 ‘드라이버 서명’을 누른다. 여기서 ‘무시’를 고르면 다시는 호환성 메시지가 뜨지 않는다.
‘무시’를 고르면 드라이버를 깔 때 호환성 여부를 묻지 않는다.

13. 시스템 복원이 컴퓨터를 느려지게 한다?
‘시스템 복원’은 만일의 사고를 대비해 시스템 내용을 그대로 기억하는 것이다. 오류가 발생하면 사고가 나기 전 상태로 돌아가기 위해서다. 파일을 읽고, 쓰고, 지울 때마다 system volume information 폴더에 시스템 복원용 백업 파일이 저장된다. 이 때문에 PC 속도가 느려지는데, ‘시스템 복원’을 끄면 속도가 한결 빨라진다.

‘내 컴퓨터’ 아이콘을 마우스 오른쪽 버튼으로 누르고 ‘속성’을 고른다. 시스템 등록정보’ 창이 열리면 ‘시스템 복원’ 탭을 누른 다음 ‘시스템 복원 사용 안 함’을 고르고 ‘확인’ 버튼을 누르면 된다.

시스템 복원을 끄면 PC가 한결 빨라진다.

14. 하드가 이유 없이 데이터를 읽을 때는?
아무런 작업도 하지 않는데 드르륵~ 거리며 하드디스크를 읽는 소리가 난다. 본체의 HDD LED도 깜박인다. 왜 아무런 명령을 내리지 않은 하드디스크가 작동을 할까? ‘인덱싱 서비스’ 때문일지 모르므로 이 명령을 끈다. 인덱싱 서비스는 하드에 있는 파일을 정리해 빨리 뜨게 해주지만 명령을 꺼도 PC를 쓰는 데 별 문제가 없다.

제어판 → 관리도구 → 서비스 → indexing service → 속성 → 사용안함을 누른 뒤 재 부팅하면 하드가 잠잠해진다.

15. 바탕화면 단축 아이콘에서 화살표를 지우자
프로그램 파일과 단축 아이콘을 구분하기 위해 단축 아이콘에는 ‘화살표’가 붙어 있다. 알아보긴 쉽지만, 왠지 지저분해 보인다. 화살표를 지우자.

시작 → 실행 → regedit 라고 누르면 레지스트리 편집기가 뜬다.
HKEY_CLASSES_ROOT\lnkfile를 고른 뒤 오른쪽 창에서 → isshortcut를 지우면 된다.
화살표가 없어 아이콘이 깔끔하게 보인다.

16. 폴더 창을 재 빨리 연다.
탐색기에서 폴더를 이동하다보면 폴더 안에 있는 파일을 읽어 들이는 속도가 느리다는 느낌을 지울 수 없을 때가 많다. 느린 속도 때문에 답답할 때는 다음과 같이 해보자.
시작 버튼 → 설정 → 제어판 → 폴더옵션을 차례로 고른다.

‘보기’ 탭의 ‘고급설정’ 칸에서 ‘폴더 및 바탕화면 항목에 팝업 설명 표시’ ‘압축된 파일과 폴더를 다른 색으로 표시’ ‘독립된 프로세스로 폴더 창 실행’ ‘네트워크 폴더 및 프린터 자동 검색’ ‘폴더 팁에 파일 크기 정보 표시’의 체크 표시를 없앤다.
이렇게 해두면 폴더 창이 조금 더 빨리 열린다.

17. 윈도우즈 XP에서 도스 게임 하기
윈도우즈 XP는 32비트 운영체제여서 16비트 도스 게임을 누르면 실행이 되지 않고 창이 꺼져 버린다. 도스 게임을 하고 싶다면 VDM(virtual DOS machine)이란 프로그램을 내려 받아 깐다. exe 실행파일을 골라 오른쪽 마우스 단추로 메뉴를 부른 뒤 run with VDMS를 누르면 된다. VDM은 PC사랑 홈페이지 ‘프로그램 타입 캡슐’에서 내려 받을 수 있다.

윈도우즈 XP에서 추억이 담긴 게임을 즐겨보자.

18. 메신저로 파일을 받을 수 없다고?
윈도우즈 XP는 인터넷 연결 방화벽 설정 부분이 있어서 외부에서 내 PC로 접속하는 것을 막는다. 하지만 메신저나 P2P 프로그램을 쓸 때는 이 방화벽 때문에 서로 자료를 주고받지 못한다. MSN 메신저를 비롯해 메신저가 P2P 프로그램으로 자료를 주고받을 때 방화벽이 가로막으면 다음과 같이 해결한다.

바탕화면의 ‘네트워크 환경’의 ‘속성’을 연 다음 ‘로컬 영역 연결’을 한번 누른다.
마우스 오른쪽 단추를 눌러 ‘속성’을 연 뒤 고급 → 인터넷 연결 방화벽을 끈다.
인터넷 연결 방화벽을 끄면 메신저나, P2P 프로그램을 문제없이 쓸 수 있다.

19. 윈도우즈 XP에서 디스크 검사를 하자
윈도우즈는 문제가 있을 때 ‘디스크 검사’를 해 오류를 고친다. 하지만 윈도우즈 XP는 윈도우즈 98과 달리 ‘디스크 검사’ 메뉴가 따로 없다. 보조프로그램에 등록 되어 있지도 않다. 그렇다고 디스크 검사가 아예 없는 건 아니다.

내 컴퓨터 → 로컬 디스크(c:)를 오른쪽 마우스로 메뉴를 불러 ‘속성’을 누른다.
‘도구’ 탭에 가면 ‘디스크 검사’가 있다. 모든 창과 프로그램을 다 끄고 검사하도록 한다.
윈도우즈 98보다 메뉴가 간단하고 검사가 빠르다.

20. 지워도 보이는 프로그램 지우기
안 쓰는 프로그램을 제어판 → 프로그램 추가/제거에서 지우지 않고 탐색기로 폴더만 지우면 프로그램 목록에 남는다. 이것이 쌓이고 쌓이면 프로그램 설치가 안 되고, 윈도우즈까지 느려진다. 흔적이 남지 않게 깔끔하게 지워보자.

시작 → 실행 → regedit 라고 누르면 레지스트리 편집기가 뜬다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall에 들어가 지울 프로그램을 골라 지우면 된다.

21. 시스템 종료 창 바꾸기
여러 이용자가 하나의 PC를 쓸 때 시스템을 켜면 시작 화면이 뜬다. 여기에는 각 이용자가 등록되어있고 누가 어떤 프로그램을 쓰는지 간단히 나와 있다. 내가 무엇을 할지 다른 사람이 보는 게 싫다면 윈도우즈 98처럼 이름만 보이므로 보안이 더 낫다. 윈도우즈 98처럼 바꿔보자.

시작 버튼 → 설정 → 제어판 → 사용자 계정을 고른 다음 ‘사용자 로그온 또는 로그오프 방법변경’을 누른다.
‘새로운 시작 화면 사용’의 체크 표시를 없애고 ‘옵션 적용’ 버튼을 누르면 로그 창이 고전적인 형태로 바뀐다. ‘새로운 시작 화면 적용’을 누르면 윈도우 98처럼 시스템 종료 창이 바뀐다.

22. 꼭꼭 숨겨진 윈도우즈 XP 관리 프로그램들
윈도우즈 XP의 시작 버튼 → 실행을 누르면 ‘실행’ 창이 열린다. 여기에 명령을 써넣으면 작업이 바로 실행된다. ‘실행’ 창에 쓸 수 있는 명령어와 하는 일은 다음과 같다.

compmgmt.msc 컴퓨터 관리와 관련 시스템 도구 창을 연다.
diskmgmt.msc 디스크 관리 창을 띄운다.
eventvwr.msc 윈도우즈 메시지가 담긴 이벤트를 본다.
gpedit.msc 도메인 또는 액티브 디렉토리나 PC에 저장되어 있는 조직 단위에 연결된 그룹 정책 개체를 편집하는 ‘로컬 컴퓨터 정책’을 연다.
perfmon.msc 시스템 성능을 감시하고 로그와 경고를 기록한다.
secpol.msc ‘로컬 보안설정’을 열어 도메인의 PC 보안 정책을 정의하게 도와준다.
devmgmt.msc 하드웨어 장치 목록을 보고 각 장치에 대한 특성을 정하는 ‘장치관리자’ 창을 연다.
dfrg.msc ‘디스크 조각모음’ 창을 연다.
fsmgmt.msc 공유 폴더를 띄운다.
lusrmgr.msc 로컬 이용자를 확인한다.
rsop.msc ‘정책의 결과 집합’ 창을 연다.
services.msc ‘서비스’ 창을 띄운다.

23. 메뉴를 빨리 빨리
제원이 낮은 PC를 쓰고 있다면 창이 뜰 때 나타나는 갖가지 효과를 없애 창을 빨리 띄워보자.
시작 → 실행 → regedit 라고 누르면 레지스트리 편집기가 뜬다.

HKEY_CURRENT_USER\ControlPanel\desktop에서 MenuShowDelay을 살펴보면 400
으로 되어있다. 이 값을 0으로 고쳐주면 된다. 0으로 바꾸면 메뉴가 빨리 뜬다.

24. 하드디스크 파티션 하기
윈도우즈 98에서는 ‘fdisk’라는 프로그램으로 하드디스크를 나눠 썼다. 윈도우즈 XP는 이 fdisk프로그램이 없어진 대신 파티션을 쉽게 할 수 있는 메뉴가 생겼다.

시작 → 설정 → 제어판 → 관리도구 → 컴퓨터 관리 → 디스크 관리에 들어가면 하드디스크의 갖가지 정보가 뜬다. 파티션 하려는 하드디스크에 오른쪽 마우스를 눌러 메뉴를 불러온다. 파티션 뿐 아니라 하드디스크를 매만질 수 있는 갖가지 메뉴가 있다.

윈도우즈 XP는 복잡한 하드디스크 파티션을 간단히 끝낸다.

25. 내 PC 시각이 맞지 않을 때
작업 표시 줄 오른쪽에 있는 시계를 1분 1초도 틀리지 않게 맞춰보자. 먼저 작업 표시 줄의 시계를 누르고 ‘인터넷 시간’이란 탭을 누른다. ‘인터넷 시간 서버와 자동으로 동기화’를 체크하고 ‘지금 업데이트’를 누르면 된다.

인터넷 서버에 있는 정확한 시계와 연결되어 제대로 된 시간을 보여준다.

26. 회사 이름과 이용자 이름 바꾸기
윈도우즈 XP를 처음 깔 때 넣었던 회사 이름과 이용자 이름을 바꾸고 싶다면, 레지스트리를 매만지자.
시작 → 실행 → regedit 라고 누르면 레지스트리 편집기가 뜬다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion 에 들어가면 RegisteredOrganization과 RegisteredOwner라는 값이 있다.

RegisteredOrganization은 회사 이름, RegisteredOwner는 사용자 이름이다.
입맛에 맞게 바꾼 뒤 재 부팅하면 바뀐다.

27. CD롬 자동 삽입 통지 막기
윈도우즈 XP는 윈도우즈 98처럼 ‘자동 삽입 통지’ 메뉴가 없다. CD롬을 넣으면 CD롬 내용이 알아서 뜨는데, 이 기능이 귀찮다면 레지스트리를 만져 끄면 된다.

시작 → 실행에서 regedit 라고 쓰고 엔터 키를 누르면 레지스트리 편집기가 뜬다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet001\Services\Cdrom에서 Autorun값을 `0`으로 하면 CD를 넣어도 CD가 자동 실행되지 않는다.

28. 인터넷 화면이 제대로 안보일 때
인터넷 게임을 하려고 하는데 화면이 제대로 뜨지 않는다면 어떻게 할까? 인터넷을 띄우면 그 사이트에 맞는 개체가 깔리는데, 이 개체가 제대로 깔리지 않을 때 이런 일이 일어난다.
제어판 → 인터넷 옵션 → 일반 탭에서 임시 인터넷 파일의 ‘설정’ 메뉴를 찾는다.

‘개체 보기’를 누르면 내 PC에 깔려 있는 갖가지 개체들이 보인다. <Ctrl + A> 키를 눌러 ‘전체 선택’을 한 뒤 Del 키를 눌러 지운다. ‘예’를 누르면 말끔히 지워진다. 다시 인터넷 사이트에 들어가면 개체가 깔리기 전에 ‘예’ ‘아니오’라는 창이 뜬다. ‘예’를 누르면 개체가 바로 깔려 인터넷 화면을 제대로 볼 수 있다.

'예‘를 눌러야 화면을 띄우는 데 필요한 개체가 깔린다.

29. ‘도움말 및 지원’ 메뉴 지우기
윈도우즈를 쓰다가 모르는 것이 있으면 ‘도움말’을 보지만 사실 별 도움이 되진 않는다. 차라리 이것을 없애면 프로그램이 띄울 때 조금 더 빨리 뜬다.
시작 → 실행 → regedit 라고 누르면 레지스트리 편집기가 뜬다.

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer에 간 뒤 ‘새로 만들기’ 에서 DWORD값을 만든다.
이름을 NoSMHelp으로 하자. 마우스를 두 번 눌러 데이터 값을 불러와 ‘1’이라고 넣자.
재 부팅 하면 ‘도움말 및 지원’ 메뉴가 뜨지 않는다.

30. 쓰지 않는 MSN 익스플로러 지우기
윈도우즈 XP를 처음 깔면 MSN 익스플로러가 깔려 있다. MSN 익스플로러는 MSN과 핫메일을 쓰는 사람에게 유용한 프로그램이지만 쓰지 않는다면 이 프로그램을 지워 하드디스크 용량을 늘이자.
시작 → 모든 프로그램 → MSN Explorer 아이콘에 마우스를 갖다 댄다. 오른쪽 마우스 버튼으로 메뉴를 불러와 속성을 누른다. 등록정보 창이 뜨면 ‘대상 찾기’를 누른다.
Setup 폴더를 열어 보면 msnunin이란 프로그램이 있는데, 이것이 MSN Explorer을 지우는 프로그램이다. 마우스로 두 번 눌러 시작 메뉴에 있는 내 PC에서 MSN 익스플로러를 지운다.

꼭꼭 숨어 있는 이 파일을 누르면 MSN 익스플로러가 지워진다.

31. 종료 로고만 뜨고 전원이 안 꺼질 때
‘시스템 종료’를 누르면 ‘이제 시스템 전원을 끄셔도 됩니다’라는 창만 뜨고 꺼지지 않는 일이 있다. 이럴 때 제어판 → 전원 옵션 → APM 탭으로 들어가 ‘최대 절전 모드 사용’을 체크하면 된다.

32. CD를 굽고 있는 도중 PC가 먹통이 될 때 주로 4배속 아래의 낡은 CD-RW 드라이브에서 이런 일이 생긴다.
제어판 → 시스템 → 하드웨어 탭의 ‘장치 관리자’로 들어간다.
IDE ATA, ATAPI 컨트롤러를 눌러 광학 드라이브가 꽂힌 보조 IDE 채널을 두 번 누른다. 전송모드가 DMA로 되어 있다면 PIO로 바꾼 뒤 적용을 누른다.

PIO 모드로 바꾸면 오래된 CD-RW라도 CD를 척척 구워낸다.

33. 640 × 480 해상도로 띄우기
윈도우즈 XP 제어판 → 디스플레이 등록정보를 보면 800 × 600이 가장 낮은 해상도로 되어 있지만, 640×480 해상도를 불러 올 수 있다.
제어판 → 디스플레이 → 설정의 ‘고급’ 단추를 누른다.
‘어댑터’ 탭에 들어가면 아래에 ‘모든 모드 표시’라고 되어있다. 이곳을 누르면 640×480 해상도에 256 컬러로 바꿀 수 있다.

256 컬러가 아니면 뜨지 않는 고전 게임을 즐길 때 좋다.

34. 바탕 화면 보기 아이콘 만들기
바탕화면 보기 아이콘은 모든 창을 최소화 시킬 때 편하다. 이 아이콘을 실수로 지웠다면 당황하지 말고 새로 만들어보자. 시작 → 보조프로그램 → 메모장을 열어 다음과 같이 쳐 넣는다.

[Shell]
Command = 2
IconFile=explorer.exe,3
[Taskbar]
Command=ToggleDesktop

‘다른 이름으로 저장’을 고른 뒤 ‘바탕화면보기.scf'라고 저장하면 끝난다.

저장한 파일은 작업 표시 줄의 ‘빠른 실행’ 안에 끌어다 놓자.

35. 메신저 광고 메시지는 이제 그만!
인터넷 사이트에 가입하지 않았는데도 MSN 메신저를 통해 스팸 쪽지가 계속 날아온다. 이것은 사실 MSN 메신저와 아무 상관이 없다. 메시지를 보내는 이들은 무작위로 IP 주소를 뽑아 윈도우즈 NT 계열의 기본 서비스인 내부 네트워크를 이용해 광고성 쪽지를 보내는 것이다. 이 쪽지를 받지 않으려면 다음과 같이 한다.

제어판 → 관리도구 → 서비스 → Messenger에서 시작 유형을 ‘시작 안함’으로, 서비스 상태를 ‘중지’로 하면 된다.

이제 지긋지긋한 스팸 메시지가 오지 않는다.

36. 윈도우즈 포맷하기 전, 즐겨찾기 백업은 필수
윈도우즈를 포맷하고 다시 깔고 나서 해야 할 일이 너무 많다. 즐겨찾기 사이트를 일일이 다시 등록하는 일도 장난이 아니다. 하지만 즐겨찾기가 저장되는 디렉터리만 알고 있으면 이런 노가다(?)를 하지 않아도 된다.

윈도우즈를 포맷하기 전에 c:\documents and settings\이용자 이름\favorites를 통째로 다른 드라이브에 복사해 놓자. 윈도우즈를 다시 깐 뒤 같은 디렉터리로 복사한다. 인터넷의 즐겨찾기를 열면 고스란히 사이트가 들어있다. 하지만 전에 저장했던 순서까지 그대로 열리는 것은 아니므로 약간 손봐야 한다.

37. 하위 폴더를 재 빨리 연다
하위 폴더를 열려면 현재 폴더를 마우스로 두 번 누르거나 그 옆에 있는 +를 고른다. 따라서 디렉토리가 여러 단계로 되어 있으면 필요한 것을 열기위해 이일을 여러 번 반복해야 한다. 하지만 맨 아래에 있는 것을 단 한번에 여는 방법이 있다.
작업하려는 폴더를 고른 뒤 숫자 키보드에 있는 * 키를 함께 누르면 아래에 있는 모든 폴더가 열린다.

38. 지운 파일 되살리기
탐색기나 내 컴퓨터에서 실수로 중요한 파일을 지우기 십상이다. 하지만 걱정하지 않아도 된다. 도구 모음에 있는 ‘실행 취소’ 버튼을 누르면 사라졌던 것이 다시 나타나기 때문이다. 단축 키는 <Ctrl + Z>다.

‘실행취소’ 버튼을 누르면 방금 전 내린 명령이 무효가 된다.

39. 파일 이름이 안 바뀌네?
아무 작업도 하지 않는데 파일 이름이 안 바뀔 때가 있다. 이럴 때 재 부팅하지 않고 이름을 바꾸는 법을 살짝 공개한다. 파일을 고른 뒤 오른 쪽 메뉴를 불러와 ‘속성’을 누른다. 이 곳에서 이름을 바꿔보자 안 바뀌던 파일 이름이 손쉽게 바뀐다.

파일 복사 중이면 이 방법을 써도 바뀌지 않는다.

40. 내가 원하는 시각에 PC 끄기
시작 → 실행에서 ‘tsshutdn 시간(초)’을 넣자.
PC를 1분 뒤에 끌 거라면 tsshutdn 60, 1시간 뒤에 끌 거라면 tsshutdn 3600이라고 넣으면 된다. 시간이 되면 바로 종료 되는 것이 아니라 만약을 위해 30초를 더 센다.

취소하려면 꺼지기 전에 <Ctrl +C> 키를 누르면 된다.

41. 한글 자판 먹통 됐을 때
인터넷 검색을 하다가 갑자기 한글 자판이 안 먹힐 때가 있다. 이럴 때 PC를 재 부팅 하지 말고 간단하게 해결하자.
대부분 왼쪽 Alt를 한번 누른 뒤 한/영 키를 누르면 한글로 바뀐다. 이 방법이 안 되면 왼쪽 <Shift + Alt> 키와 마우스 오른쪽 버튼을 누른 뒤 한/영 키를 누르면 된다.

42. 윈도우즈 XP의 숨겨진 복사 재주
파일을 복사할 때 같은 파일이 있으면 겹쳐 쓸 것인지 물어보는 창이 뜬다. 모두 겹쳐 쓸 때 ‘모두 예’라는 항목은 편하지만, 겹쳐 쓰지 않고 이어서 복사하려면 ‘아니오’를 일일이 눌러야 된다. 이럴 때 중복된 것만 빼고 복사하는 ‘모두 아니오’가 있으면 얼마나 편할까?

윈도우즈 XP는 이런 재주가 숨겨져 있다. Shift 키를 누른 상태에서 ‘아니오’를 눌러보자. 똑같은 파일은 건너뛰고 복사 되지 않은 파일만 복사된다.
많은 파일을 복사할 때 편하다.

43. 인터넷 익스플로러 이름 바꾸기
인터넷 창 타이틀 맨 윗부분을 보면 Microsoft Internet Explorer란 꼬리표가 달려있다. 이 꼬리표 이름을 내맘대로 바꿔보자. 시작 → 실행 → regedit 라고 누르면 레지스트리 편집기가 뜬다.
 
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main를 찾은 뒤 편집 → 새로 만들기 한 뒤 Window Title 이라고 써 넣는다. 만들었다면 왼쪽 마우스 단추를 두 번 눌러 이름을 써 넣는다. PC를 재 부팅하면 이름이 바뀐다.

인터넷 창 위에 있던 Microsoft Internet Explorer란 글자를 내 맘대로 바꾸었다.

44. 시작 페이지 고정하기
인터넷을 하다 보면 성인사이트가 첫 페이지로 뜨는 일이 종종 있다. 인터넷 옵션에서 홈페이지를 바꿔도 계속 뜨는 사이트가 정말 짜증난다. 레지스트리를 매만져 이런 문제를 말끔히 털어버리자.
시작 → 실행에서 regedit 라고 쓰고 엔터 키를 누르면 레지스트리 편집기가 뜬다.

HKEY_LOCAL_MACHINE\Software\Microsoft\InternetExplorer\Main, HKEY_CURRENT_USER\Software\Microsoft\InternetExplorer\Main으로 가서 둘 다 Start_Page 의 값을 처음에 띄우려는 페이지 주소로 바꾼다.
그 다음 왼쪽 창 Main 에서 오른쪽 클릭 ‘사용 권한’ 고른 뒤 쓰고 있는 계정을 고른 다음 밑에 고급 → 편집을 누른다. 값 설정에서 ‘거부’에 체크 하면 끝난다.

이 곳에서 사이트 이름을 바꾼다.

45. MSN 메신저 6의 숨겨진 이모티콘들
MSN 메신저에는 재미있는 이모티콘이 들어 있다.
메신저를 띄운 뒤 이 단어들을 채팅창에서 쳐 넣으면 재미있는 이모티콘이 뜬다.
(st) = 비
(%) = 수갑
(pl) = 접시
(ci) = 담배
(li) = 번개
(tu) = 거북이
(xx) = 엑스박스
(yn) = 검지와 중지

46. 윈도우즈의 보기 설정을 한결같이
파일 목록을 특정한 방식, 예를 들어 ‘큰 아이콘’으로 표시하거나 ‘자세한 정보’와 함께 표시할 때, 모든 폴더의 보기 옵션을 이와 같은 방식으로 두루 적용할 수가 있다.
윈도우즈 탐색기의 ‘도구’ 메뉴에서 ‘폴더 옵션’을 고른다.
 
‘보기’ 탭의 ‘폴더 보기’ 칸에서 ‘모든 폴더에 적용’ 버튼을 누른 다음 ‘폴더 보기’ 창이 열리고 모든 폴더에 적용할 것인지 물으면 ‘예’ 버튼을 누른다.
다른 폴더에서도 보기 옵션을 일일이 정하지 않아도 된다.

47. 드라이브 순서 바꾸기
윈도우즈 98 제어판에서 바꿀 수 있던 ‘드라이브 순서’가 윈도우즈 XP에는 없다. 하지만 꼭꼭 숨겨져 있을 뿐 바꾸지 못하는 것은 아니다.

시작 → 실행 → diskmgmt.msc를 치면 ‘디스크 관리’가 뜬다. 바꿀 드라이브를 누르고 오른쪽 단추로 메뉴를 불러온 다음 ‘드라이브 문자 및 경로 변경’을 누르면 된다. 가상 드라이브와 CD롬이 뒤죽박죽일 때 이 곳에서 순서를 바꿔 정리할 수 있다.
운영체제가 깔린 드라이브는 바꿀 수 없다.

48. 윈도우즈 미디어 플레이어 9 지우기
윈도우즈 미디어 플레이어 9는 영화를 보기에 좋지만, 실시간 방송이 뜨지 않는 일이 종종 있다. 이것은 윈도우즈 미디어 플레이어 9가 실시간 서비스인 VOD를 제대로 알아채지 못해서다.

이런 이유로 윈도우즈 미디어 플레이어 9를 지우고 종전 버전으로 돌리려면 시작 → 실행 → RunDll32 advpack.dll,LaunchINFSection %SystemRoot%\INF\wmp.inf,Uninstall이라고 치면 된다.

윈도우즈 미디어 플레이어 9를 깔기 전으로 돌릴 수 있다.

49. 누가 내 PC 만졌어!
내 PC가 언제 켜졌는지 남이 내 PC를 만졌는지 알 수 있는 방법이 있다.
시작 → 프로그램 → 보조프로그램의 메모장에서 다음과 같이 써 넣자.
@echo off
echo Windows 부팅 >>c:\list.txt
echo %date% %time% >>c:\list.txt
echo. >>c:\list.txt
파일 이름을 list.bat라고 저장한 뒤 저장한 파일을 시작 프로그램에 놓는다.

c 드라이브에 들어가 list.tct 파일을 보면 PC를 켠 흔적이 남아있다.

50. 깔지마! 깔지 말란 말야!
사이트에 접속할 때마다 바탕 화면에 깔리는 아이콘을 일일이 지우는 것도 지겹다. 웹 사이트 아이콘을 바탕화면에 깔지 못하게 해보자.
제어판 → 인터넷 옵션 → 보안에서 ‘웹 컨텐트 영역’을 ‘인터넷’으로 고른다.
‘사용자 지정 수준’을 누른다. ‘바탕 화면 항목 설치’를 찾아 ‘설치 안함’을 고르면 된다.

이제 바탕화면에 웹 사이트 아이콘이 깔리지 않는다.

51. 머리글과 바닥글 없애기
인터넷 화면을 문서로 뽑으려면 파일 메뉴의 ‘인쇄’를 누르면 된다. 하지만 프린터에 http://www.ilovepc.co.kr/record_detail_read.php?NO=15879같은 경로가 같이 찍혀 나와 지저분하다. 이것이 싫으면 파일 → 페이지 설정을 눌러 ‘머리글’과 ‘바닥글’에 있는 칸을 깨끗이 지운다음 인쇄하면 된다.

'&w&b페이지 &p / &P'라는 부분을 지우면 된다.

52. 키보드 없이 키보드를 친다?
윈도우즈 XP는 키보드가 없이 PC를 쉽게 쓸 수 있도록 ‘화상 키보드’를 지녔다. 이것은 글자 그대로 키보드 모양을 화면에 띄워 마우스로 눌러 글자를 띄우거나 프로그램을 실행시킨다. 시작 → 프로그램 → 보조프로그램 → 내게 필요한 옵션 → 화상 키보드를 누르면 된다.

화상 키보드는 움직임이 불편한 장애자들을 위해 만든 프로그램이다.

53. 플로피디스크 읽지 마!
부팅한 뒤나 탐색기를 띄웠을 때 윈도우즈는 무작정 A 드라이브인 플로피디스크를 읽는다. 이것은 하드웨어가 잘 달려 있는지를 윈도우즈가 알아보는 것이다. 이런 일을 없애도 윈도우즈를 쓰는 데 아무런 이상이 없으므로 윈도우즈가 하드웨어를 검색하는 명령을 고치자.
제어판을 띄워 ‘관리도구’를 열고 ‘서비스’ 아이콘을 골라 shell hardware detection 항목을 두 번 누른다. ‘시작 유형’을 ‘자동’으로 맞추고 ‘확인’ 버튼을 누른다.
‘서비스’ 창에서 shell hardware detection 항목을 골라 시작 유형을 ‘자동’으로 바꾼다. 이렇게 하면 플로피디스크를 읽지 않는다.

플로피 디스크를 자주 쓰지 않는다면 ‘자동’으로 바꾸자.

54. 최대 절전 모드 해제로 하드디스크 용량을 확보하자
제어판의 ‘전원 옵션’ 가운데 최대 절전 모드를 쓰면 윈도우즈는 얼마 뒤 메모리에 담긴 데이터를 하드디스크에 저장하고 적은 전기만 쓰면서 대기모드로 들어간다. 이 때 하드디스크 용량을 500MB 정도 차지한다.

대기모드를 쓰지 않는 이에게 이 옵션은 하드디스크 용량만 잡아먹는 쓸데없는 것이다. 바탕화면에 대고 마우스 오른쪽 버튼을 눌러 ‘속성’을 눌러 ‘디스플레이 등록정보’ 창을 띄운다. 화면보호기 항목에서 ‘전원’ 버튼을 누르고 전원 옵션 등록정보를 보자. ‘최대 절전 모드’ 탭에서 체크 표시를 없앤다.

55. 응답이 없는 프로그램 빨리 닫기
윈도우 XP 응답이 없는 프로그램은 시간이 얼마 지나야 닫히게 된다. 기다린다고 응답 없는 프로그램이 다시 살아나는 것도 아니므로 이 시간을 무시하고 바로 끄자.
시작 → 실행에서 regedit 라고 쓰고 엔터키를 치면 레지스트리 편집기가 뜬다.
HKEY_CURRENT_USER\Control Panel\Desktop에서 HungAppTimeout를 왼쪽 마우스로 두 번 눌러 1000으로 고치면 된다.

56. 내가 쓰는 윈도우즈 XP가 정품일까?
윈도우즈 XP는 불법 복제를 쓰지 못하게 인터넷으로 정품 등록을 한다. 이것을 흔히 ‘인증을 받는다’고 한다. 하지만 인증을 받지 않고도 정품처럼 쓰는 불법 OS가 널리 퍼져 있다. 정품인데도 인증을 받지 않으면 적어도 30일 동안 작동한다. 과연 내가 쓰는 윈도우즈 XP는 인증을 받은 것일까?
시작 → 실행 → oobe/msoobe /a라고 치면 인증 창이 뜬다.

정상적인 OS이면 그림처럼 인증을 받았다는 메시지가 보인다.

57. MSN 메신저를 지우자
프로그램 추가/제거에서는 MSN 메신저를 지울 수 없다. 지우고 싶다면 시작 → 프로그램 → 보조프로그램에 있는 메모장으로 c:\windows\servicepackfiles\sysoc.inf 파일을 연다.
msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,hide,7이라고 되어 있는 줄을 찾은 뒤,
msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,7로 바꿔주면 시작 → 제어판 → 프로그램 추가/제거 → windows 구성요소 추가/제거에 MSN 메신저 체크박스가 뜬다. 이 박스를 끄면 MSN 메신저를 지울 수 있다.

MSN 메신저를 쓰지 않는다면 이 곳에서 지우면 된다.

58. L2 캐시 매만져 PC를 재빨리 돌리자
윈도우즈 XP는 CPU의 L2 캐시를 알아채 PC를 재빨리 돌린다. 하지만 데이터가 많아지거나 멀티태스킹을 할 때 캐시를 읽지 못해 순간적으로 느려질 때가 있다. 캐시를 고정시켜 운영체제가 일일이 캐시 메모리를 찾는 수고를 덜어주자.

시작 → 실행 → regedit 라고 누르면 레지스트리 편집기가 뜬다.
KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management를 찾은 뒤 SecondLevelDataCache를 고른다.
그 다음 내 CPU에 맞는 캐시를 넣으면 된다. 바탕화면에 있는 ‘내 컴퓨터’를 누른 뒤 오른쪽 메뉴를 불러와 ‘속성’을 누르면 내 CPU 정보가 뜬다.

10진수로 바꾼 뒤 캐시를 써 넣으면 된다.

59. 다이렉트 X의 최신 버전 깔기
시작 → 실행에서 dxdiag라 쳐 넣고 엔터를 치면 다이렉트 X 버전 뿐 아니라 갖가지 정보가 뜬다. 다이렉트 X가 8.1 이하가 깔려있다면 9.0을 새로 까는 것이 좋다. 게임속도가 재빨라지기 때문이다.

 다이렉트 X 9.0을 내려받고 싶다면 시작 → windows update에서 인터넷 익스플로러 창이 뜨면 ‘업데이트 검색’을 누른 다음 중요 업데이트 및 서비스 → 업데이트 검토 및 설치를 눌러 ‘지금 설치’를 누르면 된다.

다이렉트 X 9.0이상이 깔려있는지 확인하자.

60. 인터넷 익스플로러를 전체 화면으로 보자
인터넷 익스플로러를 전체 화면으로 시원시원하게 보는 방법이 있다.
인터넷 창을 띄우고 F11 키를 눌러도 되지만 항상 전체 화면으로 띄우려면 레지스트리를 매만져야 한다. 시작 → 실행 → regedit 라고 누르면 레지스트리 편집기가 뜬다.

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main 으로 간 다음 오른쪽 창에서 FullScreen을 찾는다.
FullScreen을 두 번 눌러 no를 yes로 바꾸면 된다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
Posted by 소리나는연탄.

Leave your greetings here.

  
  
  
  
  
  
  
  
 
준비물:랜카드 2개 ;;있겠죠 없으시면 컴퓨터점을 가서 만원 주고 하나 삽니다

(1)랜카드 2개를 메인보드에 장착 시키고 인식을 시킵니다
(2)네트워크연결로 가서 로컬영역연결 2개가 있을겁니다

그럼 그 두개를 드래그 시킨후 '연결 브리지'를 눌러줍니다. 그럼 번개 같이 생긴 모양이 생기면서 브리지가 완성 되었을것입니다

(3)연결브리지를 오른쪽 마우스 눌러서 '속성'으로 들어갑니다
(4)NetWare용 클라이언트 서비스를 클릭해 주시고 '설치'를 눌러 줍니다
(5)설치를 눌러주면 '네트워크 구성 요소' 아래에 보면 클라이언트가 있습니다

클라이언트를 눌러주시고 추가를 눌러주시면 NWlink NetBIOS 가 잇습니다. 그것을 설치를 시키고 재부팅을 시켜줍니다

(6)자 그럼 모든게 끝났구요 마무리로 ..연결브리지 '속성'을 눌러주시고

인터넷 프로토콜 tcp/ip 클릭하고 속성을 눌러줍니다

(7)다음IP주소 사용 을 체크 해 주시고 연결브리지를 더블클릭 해주시고'지원'

'자세히'를 눌러보시면 ip주소.서브넷마스크.기본 게이트웨이.DNS 서버 등등.. 보일것 입니다 그러면 인터넷 프로토콜 TCP/IP 에서 다음 아이피 주소 사용,다음 DNS서버 주소 사용을 클릭하시고 ip주소.서브넷마스크.기본 게이트웨이.DNS 서버를 그대로 입력해 주시면 됩니다

그러면 연결브리지 속성에 보면 '수동으로 설정' 뜨면서 아이피가 고정된것을 확인 할수 있습니다. 3일을 켜도 그 아이피 그대로 입니다

제가 이 방법을 쓰려고 하진 않았지만 네티즌들과 방법을 공유 하면 더 좋을것 같아서 적었습니다.그럼 7만원주고 비싼 고정아이피 상품 신청하시지 마시고 열심히 사용하시기 바랍니다. 아 참고로 고정아이피를 해체하고 다시 유동아이피로 만들고 난다면 연결브리지를 삭제 해주시면 됩니다.

이방법은 99.9%가 되구요 이 방법이 무슨 인터넷에 떠도는

http://www.codns.com/korean/
http://xdns.co.kr

같이 아이피를 포워딩 해주는게 아닙니다. 말그대로 고정아이피로 만들어 주는겁니다
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
Posted by 소리나는연탄.

Leave your greetings here.

  
  
  
  
  
  
  
  
 

이미지레코딩을 처음 해보시는분은 이 설명서를 프린트하여 꼼꼼히 보아 가면서 하시면 금방 익숙해집니다,

(이 설명서는 초보분들을 위한것이니 고수분들은 그냥 넘어 가세요,^^)

☞주의1: ISO이미지파일을 데이터굽기로 해서 사용하면 절대 안되고
반드시 아래와 같이 이미지레코딩을 해서 사용해야 합니다,


☞주의2: 일단 다운받은 ISO이미지파일이 시디 부팅이 지원되는 것인지를 먼저 확인 해볼 필요가 있습니다.

(모든 이미지파일이 시디부팅이 돼야할 필요는 없으나 윈도우와 같은 운영체제의 경우는 반드시 시디부팅이 가능 해야합니다, 운영체제 이외의 유틸(한글2005,오피스등일반유틸)은 시디부팅이 안되는것이 당연 합니다.  운영체제이미지 파일의 경우는 굽고 난 다음 시디부팅이 지원이 안되면 곤란 하므로 미리 알아볼 필요가 있습니다.)

그러기 위해선 프로그램 하나를 사용 해야합니다. 제 유틸폴더내의 가상시디및레코딩폴더내의 "UltraISO 7.0.718(한글지원)"을 다운받아 설치한후에 이 프로그램을 실행 한후에 옵션에서 언어-korean으로 설정 해줍니다,

그 다음 위의 메뉴에서 파일-열기 에서 다운받은 운영체제ISO이미지파일을 지정 해준후에 "부팅가능" 이라고 나오면 시디부팅이 가능한 이미지 이고 그렇지않고 "부팅불가능"이라고 나오면 시디부팅을 지원하지않는 이미지파일 입니다.


☞주의3: ISO 이미지파일은 절대 압축파일이 아닙니다.

간혹 ISO 이미지파일이 압축파일처럼 보여 압축을 푸는 크나큰 잘못을 저지르는 경우가 있는데 그것은 WinRAR를 설치 하신후에 옵션-설정-통합-WinRAR에 연결항목을 보시면 압축파일항목이 죽 나오는데 다른것은 다 체크 하되 그중에서 ISO에 체크를 지워주셔야 ISO파일이 압축파일로 설정되는 오류가 없어집니다.

마찬가지로 알집을 설치한 경우에도 연결파일중에서 ISO파일과 LCD파일의 체크를 없애주어야
ISO 이미지파일과 LCD이미지파일이 압축파일처럼 보이는 오류를 방지할수가 있습니다,


☞주의4:우선 다운받은 iso이미지파일을 시디로 굽기전에 제대로 된 이미지인지 아닌지 일아보고
시디로 굽는것이 좋습니다.다운받자 마자 무작정 시디로 굽게되면 공시디를 날릴 우려도 있으니
우선 시디스페이스5.0과 같은 가상시디롬에 넣고 설치를하고 오류가 없이 설치가 되는지 확인을 합니다.

(단운영체제프로그램은 가상시디로 돌려서 확인을 못하니 삼가하여 주십시요)
시디스페이스5.0으로 돌려서 설치를하는데 오류가 생긴다면 우선 자신의 컴환경을 점검해보시고 다른사람은 다 된다는데 자신만 이상이 있다면 업로드된 이미지자체에는 이상이 없는데 네트워크전송상의오류가 발생하여 그런수가 있으니 해당이미지를 삭제하고 다른 한가한 시간에 다시 다운 받거나 또는 다른분의 것을 다운받거나 폴더프러스의 것을 다운받거나 하여 다시 시디스페이스5.0으로 돌려봅니다.

그 다음에 설치가 되면 시디로 굽고 시디로 구었는데 이상이 있다면 100% 시디레코딩이 질못된것이니 다시 점검을 하여 저배속으로 신중 하게 다시 시디레코딩을 하면 됩니다.

(참고로 저는 업로드를 할때는 운영체제iso이미지는 반드시 시디로 구어서 설치가 완벽하게 되는것을 확인하고 그외 한글2005등의 다른 유틸들의 iso이미지는 시디스페이스5.0으로 돌려서 설치가 되는것을 확인하고 업로드를 합니다.)


★★★ ISO 이미지파일을 시디레코딩하는 방법 ★★★

(1) 알콜120%에서 ISO이미지파일을 시디레코딩 하는 방법

우선 시디레코딩을 하기전에 모든 응용프로그램을 중지 시킵니다, 그다음에  CDRW에 공시디를 넣은후에 알콜120%를 실행하면 메뉴가 뜨는데 그때 좌측메뉴중 2번째인 "이미지기록마법사"를 클릭 합니다.

그럼 창이 하나 뜨고 "기록할이미지파일을 선택하십시요."의 밑에 찾기를  클릭하여 다운받은 ISO이미지파일을 지정 해줍니다. (여기서 그밑의 "기록후에 이미지파일을 삭제합니다."에는 체크를 해제 주세요,혹 잘못 구어지면 다시 구어야 하니깐요.)

다음을 누르면 또 창이 하나 뜨는데 그 창을 보고서 자신의 시디레코더가 지정되어 있는지 살펴보고 쓰기속도는 가급적 4배속이하로 낮추어줘야 부팅이 잘되고 오류가 안납니다. 거기서 "쓰기"와 "버퍼언더런기술사용"에만 체크를 해주시고 다른곳의 체크는 해제하여주세요,

간혹 2-3년전에 구입한 구형시디레코더는 버퍼언더런기술사용이 안되는 경우도 있습니다.이런 경우는 배속을 1배속으로 낮추어주셔야 오류가 안나니 반드시 그렇게 해주세요.

그리고 사본개수는 1개로, 쓰기방법은 DAO/SAO로 해주시고요, 그다음에 시작을 누르면 시디레코딩이 시작됩니다. 데이타굽기는 배속을 다소 높여도 오류가 안생기나. 이미지파일은 배속을 4배속이하로 낮추어줘야 오류가 안생기니 그렇게 해주시고 이제 느긋하게 시디가 구어지기를 기다리면 됩니다.

시디가 다 구어지면 시디레코더가 문이 열리며 과정이 끝나게 됩니다. 그후에 시디가 제대로 구워졌는지 테스트를 해본후에 해당 이미지파일을 처리하십시요, 혹 제대로 안 구워지는 경우도 발생하는데 그때는 다시 구어야 하니깐요,

(추신) 알콜120%에서는 이외에도 .img  .nrg .cue  .bin  .vcd  .raw  .fcd  .mdf등의 이미지파일도 위와 같은 방법으로 시디레코딩을 할수가 있습니다.

(2) 이지시디크리에이터6.0에서 ISO이미지파일을 시디레코딩 하는 방법

우선 시디레코딩을 하기전에 모든 응용프로그램을 중지 시킵니다, 그다음에  CDRW에 공시디를 넣은후에 이지시디크리에이터6.0을 실행하면 창이 하나 뜨는데 거기서 CREATOR CLASSSIC를 클릭합니다.

그러면 창이 하나 뜨는데 거기 맨위의 메뉴중 File- Record DISC from image를 클릭하면 창이 하나 뜨는데 거기서 다운받은 ISO 이미지파일을 지정해주고 열기를하면 또 창이 하나 뜨는데 거기서 자신의 시디레코더가 올바로 지정되어있는지 살펴보고 Write Speed를 4배속이하로 , Number of Copies를 1개로, Buffer Underrun Prevention에 체크를 해주고 OK버튼을 클릭하면 시디가 구워지기 시작합니다,

간혹 2-3년전에 구입한 구형시디레코더는 버퍼언더런기술사용이 안되는 경우도 있습니다.이런 경우는 배속을 1배속으로 낮추어주셔야 오류가 안나니 반드시 그렇게 해주세요.

시디가 구어지면 테스트를 반드시 해본후에 해당이미지파일을 처리 하십시요, 간혹 제대로 안 구워지는 경우도 발생하는데 그때는 다시 구어야 하니깐요,

(3) 네로버닝롬에서 ISO이미지파일을 시디레코딩 하는 방법

 네로에서도 위의 이지시디6.0과 그 방법이 거의 유사합니다, 우선 시디레코딩을 하기전에 모든 응용프로그램을 중지 시킵니다, 버퍼언더런기능도 반드시 체크를해주시고요.

(a) 데이터디스크만들기-레코더-이미지레코딩에서

다운 받은 이미지를 지정하여 시디를 구우면 됩니다. 여기서도 이미지를 구울시에는 가능한 4배속으로 구워야 오류가 안나며 버퍼언더런에도 체크를 해주세요,

 (b)네로 6.x.xx 이상버전 에서는 더 쉽게 이미지레코딩을 할수가 있습니다.

Nero StartSmart를 실행-위의 메뉴중 5번째메뉴인 복사및백업을 클릭-그밑의 메뉴중 "디스크로 이미지레코딩"를 클릭 - 거기서 나타나는 창에서 다운받은 이미지파일을 지정해준후에 이미지파일과 대상드라이브가 맞는지 확인한후에 레코딩속도를 4배속으로, 복사매수를 1로 지정해준후에
다음을 클릭하면 레코딩이 시작됩니다, 레코딩이 끝나면 레코더의 문이열리며 그후에 제대로 구워졌는지 확인 한후에 시디의 내용을 확인하고 운영체제프로그램의 경우는 시디부팅 여부까지 확인함 이미지파일을 자신의 뜻대로 처리하면  됩니다.


(4) 시디스페이스에서 ISO이미지파일을 사용하는 방법

(주의:이것은 시디를 굽는것이 아니라 가상시디를 이용하여 ISO이미지파일을 사용 하는것이니 절대로 윈도우와 같은 운영체제설치에는 사용하지 마십시요,가상시디로 운영체제를 설치하면 100% 오류가 발생하니 절대로 하지 마시고 반드시 위의 방법대로 시디로 구워서 설치 하세요!)

우선 시디스페이스5.0이란 프로그램을 실행시킨후 시디스페이스 프로그램이 없으면 제 유틸폴더내에 있는 시디스페이스를 다운 받아 설치하세요.

시디스페이스의 메뉴란 추가버튼을 누른후 다운 받은 ISO파일을 찾아 열기 한후에 시디스페이스의 맨밑을 보면 추가한 이미지가 보입니다. 그 이미지파일을 우클릭 한후에 이미지삽입을 하면 가상시디롬속에 그이미지가 들어가게 됩니다.

그런후에 해당가상시디롬을 찾아가서 (보통 진짜시디롬의 다음 문자드라이브가 가상시디롬으로 지정 되어있습니다.예를 들면 하드디스크가 C이고 진짜시디롬이 D라면 시디스페이스의 가상시디롬은 그 다음인 E이후가 해당 됩니다.

 가상드라이브의 숫자는 1개이상 임의로 설정할수가 있으며 가상시디롬속에 이미지2개를 모두 넣고 싶다면 드라이브의 숫자를 2개이상으로 설정 한다음에 이지지추가를 한후에 맨밑의 이미지를 우클릭한후에 이미지정보에 들어가서 기본드라이브의 문자를 각기 다르게 설정해주면 됩니다,

예를 들면 하드디스크가 C, 진짜시디롬이 E이고 가상드라이브가 F와 G 라면 기본드라이브지정에서 하나는 F 하나는 G 로 설정해주면 이미지2개가 모두 가상시디롬속에 들어가게 됩니다

(5) LCD파일을 ISO파일로 변환하는 방법

LCD파일을 바로 시디레코딩 하는것은 불가능 하므로 다음과 같이 시디스페이스를 이용하여 LCD파일 →ISO파일로 변환합니다.  시디스페이스5.0을 실행 한후에 이프로그램이 없으신분은 제유틸폴더내의 가상시디및시디레코딩프로그램에 있는 시디스페이스를 다운받아 설치합니다,

매뉴중 파일-이미지변환을 클릭하면 창이 하나 뜹니다, 거기서 위의 그림메뉴중  LCD→ISO 를 클릭한후에 변환할원본LCD파일에 다운받은 LCD이미지파일을 지정해주고 변환될대상ISO파일에 적당한 다른 폴더에 이름을 지정해준후에 확인을 누르면 변환이 됩니다,

(주의) 게임용 LCD파일은 함부로 ISO파일로 변환해서는 안됩니다, 게임용시디는 대부분 락이 걸려있는데 이를 ISO파일로 변환하면 락을 깨지못해 게임실행이 안될수가 있으니 게임용 LCD파일은
가급적 그대로 사용 하시고 그외의 유틸들만 변환하여 시디레코딩을 하여 사용 하시기 바랍니다.

(추신) 듀플러(Duper3.0)라는 시디레코딩 프로그램에서는 LCD파일 →ISO파일로 변환하지 않고 바로 LCD파일을 시디레코딩 할수가 있습니다,(그런데 다른 시디레코딩프로그램 하고 곧잘 충돌이 나서 사용을 꺼려 하기도 합니다,제유틸폴더내의 시디레코딩프로그램내에 있으니 사용 해보실분은 다운받아 사용 해보십시요,)


** 원래 이미지에 파일이나 폴더를 추가하는 방법**

UltraISO 7.0.718(각종 이미지보기및파일추가,한글지원라는 프로그램을 사용하면 됩니다, 우선 그오리지널 이미지를 바로 시디로 굽지말고 UltraISO 7.0.718 라는프로그램을 실행한후에 이프로그램이 없다면 제유틸폴더내의  가상시디및시디레코딩프로그램내에 있으니 다운받아 사용 하세요

UltraISO 를 실행하여 옵션에서 언어를 한국어로 바꾸어 준다음 위의 메뉴에서 파일-열기를 한후에 그 원래이미지를 엽니다,그러면 아랫창에 그이미지의 내용물(파일과 폴더)이 나타납니다, 여기서 위메뉴의 작업-폴더(파일)추가를 한후에 그폴더(파일)를 지정해준후 확인을누르면 그폴더(파일)가 그이미지에 포함 됩니다,

창내용을 잘 살펴본후에(그폴더나 파일이 추가 되었는지..그다음에 위의 메뉴에서 파일-저장을누르면 그폴더(파일)가 포함된 새로운 이미지가 만들어지게 됩니다.

이런식으로 이미지파일에 파일과 폴더를 추가 할수도 있고 제거도 할수가 있습니다, 이렇게 새로운 이미지를만든후에 그이미지를 시디레코딩한후에 부팅여부를 확인한후에 이미지를 삭제 하든지 하십시요. 저도 초보때는 잘못 다루어서 시디로 구운후에 그이미지를 삭제했는데 시디부팅이
안되어서 다시 이미지를 힘들게 다운받은적이 있습니다.그리고 부팅시디는 반드시 4배속이하로 굽고요

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
Posted by 소리나는연탄.

Leave your greetings here.

  1. Comment RSS : http://wowfriend.net/rss/comment/103
  2. 비밀방문자 2009/08/22 12:49  Modify/Delete  Reply  Address

    관리자만 볼 수 있는 댓글입니다.

  
  
  
  
  
  
  
  
 

요청하시는 분들이 많아서 그동안 웹상에서 중구난방식으로
산재해 있던 많은 설정등을 나름대로 정리 해 봅니다..

*************1**********
우선 적용팁 - 윈도우 2003을 설치후 우선적으로 적용해야 될것들을 정리 했습니다..

*************2***********
전체 적용팁 - 윈도우 2003을 설치후 필수적용과 사용자 임의
적용 설정등에 대한 전체적인 사항들을 정리 했습니다.-우선적용팁과 중복된것이 있습니다..


**1** =============우선 적용 팁==================


*XP를 설치하고나면 바탕화면에 휴지통만 보인다. XP처럼 바탕화면에 기본아이콘이 보이게 할려면

바탕화면에서 오른쪽마우스클릭-->속성-->바탕화면-->바탕화면사용자 지정에서 필요한 항목을 체크 하면 된다.

*내컴퓨터 -> 속성 -> 고급 ->시각효과설정 -> 시각효과 에서 "바탕화면의 아이콘 레이블에 그림자사용","메뉴 아래에 그림자 표시"   "창 및 단추에 시각 스타일 사용" 만 체크 - 그외에는 체크를 지운다

*정품인증 여부 확인 방법
시작 -> 실행->oobe/msoobe /a (슬래시 a 앞에 한칸을 띄우는것에 주의..)


▶▶▶▶▶▶▶▶▶▶레지스트리 수정 항목◀◀◀◀◀◀◀◀◀◀

*작업표시줄 딜레이 없애기-본팁은 이후 Office를 설치한후 다시 활성화되면 다시 실행하세요..

제어판 - 국가 및 언어 옵션 - 언어 탭- 자세히- 한글 입력기(IME 2002)를 클릭--기본 설정의 입력 도구 모음 버튼을 클릭.
입력 도구 모음 설정 창에서 고급 텍스트 서비스 사용 안함을 체크.
텍스트 서비스 변경 창에서 예 를 클릭.확인 버튼을 클릭.

시작 -> 실행
Regsvr32.exe /u msimtf.dll
Regsvr32.exe /u msctf.dll
regedit
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
우측 창에서 ctfmon.exe를 삭제하고 재부팅.

다시 복원하고 싶다면 다음 실행코드를 명령 프롬포트 (실행창에 cmd입력) 에서 실행하면 된다.
%SystemRoot%\System32\Regsvr32.exe %SystemRoot%\System32\msctf.dll
%SystemRoot%\System32\Regsvr32.exe %SystemRoot%\System32\msimtf.dll

*메뉴창이 열리는 속도 빠르게.......
HKEY_CURRENT_USER / ControlPanel / desktop
에서 MenuShowDelay 항목의 값이 기본 400으로 셋팅되어 있는데 이 값을 0 에서 400 사이에서 바꾼다. (적정값2~8)

*응용 프로그램의 무응답 시간 줄이기
HKEY_CURRENT_USER / Control Panel / Desktop
에서 HungAppTimeout 값을 5000 에서 1000 으로 변경한다.

*윈도우 창의 애니메이션 효과를 없애기
HKEY_CURRENT_USER / Control Panel / desktop / windowmetrics 로이동
우측 화면에서 마우스 오른쪽 버튼을 누른후 ``문자열 값``을 선택하고 MinAnimate라고 입력.
그다음 이 값을 더블클릭하여 값을 ``0``으로 설정.

*익스 폴로러 창을 항상 최대화로 시작하기
HKEY_CURRENT_USER / Software / Microsoft / Internet Explorer / Main
에서FullScreen 항목을 찾아 no를 yes 바꾼다.

*인터넷 익스폴로러 로딩속도 향상
HKEY_LOCAL_MACHINE / SOFTWARE /Microsoft / Windows / CurrentVersion / Explorer / Browser Helper Objects   의 폴더 혹은 하위 폴더 삭제

HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Windows / CurrentVersion
/ Explorer / RemoteComputer / NameSpace 에서 {D6277990-4C6A-11CF-8D87-00AA0060F5BF} 폴더 삭제

*폴더의 파일 아이콘 출력 속도 향상 시키기
HKEY_LOCAL_MACHINE / System / CurrentControlSet / Control / Update 의 UpdateMode의 값을 1에서 0으로 수정

*바탕화면의 아이콘에서 화살표 없애기
HKEY_CLASSES_ROOT / lnkfile 에서 isshortcut 항목 삭제

*귀찮은 풍선 도움말 없애기
HKEY_CURRENT_USER / Software / Microsoft / Windows / CurrentVersion / Explorer / Advanced 에서
우측 패널에 REG_DWORD형의 EnableBalloonTips 값을 추가하고 데이타 값을 0으로 설정한다.

*웹상에서 다운로드 창의 갯수 조절
HKEY_CURRENT_USERSOFTWARE / Microsoft / WindowsCurrentVersion / Internet Settings의
오른쪽에서 마우스 오른쪽 버튼으로 클릭, [등록]→[DWORD 값] 을 선택하여
MaxConnectionsPerServer 라고 적고 적당한 다운로드 갯수(100) 을 적는다.



▶▶▶▶▶▶▶▶▶▶▶▶▶성능 향상 설정 항목◀◀◀◀◀◀◀◀◀◀◀◀◀◀◀

*ADSL외장형 부팅시 딜레이 현상해결법+++

제어판->네트워크->로컬영역->일반->속성->인터넷프로토플->속성하시면입력하는 곳 나옵니다
인터넷프로토플TCP/IP -> RealTec RTL8139(본인의 랜카드)
ip 자동 지정으로 체크되 있는걸 아래 있는 ip 중에서 자기 외장형 모뎀과 맞는 모델을 찾아 넣어 주시면 됩니다...
ip.서브넷.게이트 웨이 3 군데 모두 수정해 주시고 확인 누르시고 재부팅.

----또한 서비스 설정중 "Server"   "Workstation" 두 항목을 사용안함으로 설정-본설정은단독 컴퓨터에 한함-

-회사별 모뎀 IP 주소 -
삼성(Acelink)
IP 주소 : 192.168.82.2
서브네트 마스크 : 255.255.255.0
게이트웨이에는 192.168.82.1 을 입력

현대(SpeedXess)
IP 주소 : 10.0.0.2
서브네트 마스크 : 255.255.255.0
게이트웨이에는 10.0.0.1 입력

성미(cisco)
IP 주소 : 211.42.204.195
서브네트 마스크 : 255.255.255.0
게이트웨이에는 211.42.204.1 입력

청호(루슨트 : Phastpipe)
IP 주소 : 192.168.1.2
서브네트 마스크 : 255.255.255.0
게이트웨이에는 192.168.1.1 입력

대우(Alcatel)
IP 주소 : 10.0.0.2
서브네트 마스크 : 255.0.0.0
게이트웨이에는 10.0.0.138 입력

노텔(Kmwt)
IP 주소 : 192.168.1.2
서브네트 마스크 : 255.255.255.0
게이트웨이에는 192.168.1.1 을 입력해주시기 바랍니다.

*MS전송 오류보고창 뜨지 않게 하기

1) 시작->제어판->성능 및 유지 관리->시스템
2) 시스템 등록정보창이 나타나면 [고급]탭에서 가장 아래에 있는 오류보고 버튼을 클릭한다.
3) 오류보고 대화상자에서 `오류 보고 사용 안 함`을 선택하고 확인버튼을 누른다.

*폴더창 속도 향상

제어판에서 ``폴더옵션``을 실행한 다음, ``보기`` 메뉴탭을 선택하고 ``고급설정`` 부분에서 ``폴더 및 바탕화면 항목에 팝업 설명 표시``와 ``압축된 파일과 폴더를 다른 색으로 표시`` 그리고 ``독립된 프로세스로 폴더창 실행``의 체크를 해제한다.

*인터넷 익스폴로러 설정

도구 - 인터넷 옵션의
탐색에서 "예약시 동기화할 오프라인 항목 표시" 해제
" URL을 항상 UTF-8로 보냄" 해제
탐색에서 "프록시 연결을 통해 HTTP 1.1 사용" 해제
연결항목 랜설정항목에서... 자동구성과 프록시 서버를 모두 해제

*인터넷 보안 옵션 설정
도구-인터넷옵션-보안에서 보안을 보통으로 하여준다. 방법은
제어판-프로그램 추가/제거-windows 구성요소 추가/제거-Internet Exporer 보안강화구성-
이걸클릭후에 체크해제하고 밑에 자세히를클릭해서 연다-그럼 안에 관리자구성 과 기타사용자그룹
이렇게 두개가 보이는데 여기에 체크해제를한다. 그런다음에 확인하고나서 밑에 다음을 클릭
하면 된다. 그러면 잠시 작업후에 비활성화되는데 인터넷옵션 보안에는 보통으로 된다.

*시스템 시작시 ctrl+alt+del 안누르기
실행 - gpedit.msc 입력하고 엔터 나오는창에서
컴퓨터구성- windows 설정 -보안설정 - 로컬정책 - 보안옵션 -대화형로그온 ctrl+alt+del 의속성을 사용으로.

*시스템 종료시 이벤트 추적기 표시 안함.
시작 → 실행 → gpedit.msc → 컴퓨터 구성 → 관리 템플릿 → 시스템 를 선택하고, 우측창에서
시스템 종료 이벤트 추적표시 를 더블클릭하여 "사용 안함" 으로 변경.

*인터넷 임시폴더 용량 줄이기

익스폴로러 - 도구 -인터넷옵션- 일반- "임시인터넷"의 "설정"에서 사용할 디스크 공간을
100으로 조정 한다..

*웹상에서 실시간 동영상 시청시 끊김이 심할때..

미디어 플레이어를 수행하고 [도구]→[옵션] 메뉴를 누른다. `옵션` 대화 상자가 나타나면
[성능] 탭을 고른다. `내 연결 속도` 옵션을 고르고 목록 버튼을 눌러 `T1(1.5Mbps)`를 선택한다.
`네트워크 버퍼링` 항목에서는 버퍼를 10초로 지정한다. 다시 [네트워크] 탭을 누르고 `UDP` 항목의
체크 표시를 없앤다. `프록시 설정` 항목에서 HTTP를 마우스로 두 번 누른다. `프로토콜 구성` 대화
상자가 나타나면 `프록시 서버 이용 안함` 옵션을 선택한다.


*MSN 을 사용하기 위해 기존Windows Messenger를 삭제하고 싶을때

1.windows/inf/sysoc.inf 폴더를 메모장으로 연다.
2.msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,hide,7-->이 라인을 찾아서 아래와 같이 변경하고
  msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,7-->hide,만 제거한후 저장한다.
3.위와 같이 변경하고 시작->제어판->프로그램 추가/제거->windows 구성요소 추가/제거에
Windows Messenger체크 옵션이 나타난다. 여기에 체크를 아웃하면 삭제된다.
추가적으로 msn익스플러도 삭제할 수 있다.

*MSN 익스폴로러 삭제 하기
1. [시작]-[모든 프로그램]를 선택하고 MSN Explorer 아이콘 위에 커서를 갖다 댄다.
2. 오른쪽 마우스 버튼을 클릭한 후 [속성(R)]을 선택
3. "MSN Explorer 등록정보" 창이 뜨면 아랫부분에 있는 [대상 찾기]를 선택
4. 지금까지의 과정을 밟아 왔다면 MSN Explorer의 폴더로 이동을 해 있다.
거기에 폴더가 두 개가 있는데,Setup이란 폴더를 열어 보면 msnunin이란 프로그램이 있는데,
이게 MSN Explorer의 "제거 프로그램" 이다.클릭하면 시작 메뉴에 있는 "바로 가기"를 비롯해서 모든 게 제거.

*프로그램 오류시 시스템 재부팅 방지
내컴퓨터 -> 속성 -> 고급 -> 시작및복구 -> 설정 에서
"시스템오류"항목의 "자동으로 다시시작"을 체크해제

*cpu 100% 해결법
메모장에 아래의 내용을 복사 하여 **.inf(예:cpu100.inf)로 저장한후  파일의 마우스 오른쪽 메뉴중에서 설치항목을 선택한다.

[Version]
signature=$CHICAGO$

[DefaultInstall]
DelReg=Delete_Old_Tweaks

[Delete_Old_Tweaks]
HKLM,"SOFTWARE\Classes\CLSID\{87D62D94-71B3-4b9a-9489-5FE6850DC73E}\InProcServer32"




**2** =============전체 적용 팁==================


===메뉴창이 열리는 속도 빠르게.......
HKEY_CURRENT_USER\ControlPanel\desktop
에서 MenuShowDelay 항목의 값이 기본 400으로 셋팅되어 있는데 이 값을 0 에서 400 사이에서 바꾼다. (적정값2~8)


===마우스 오른쪽 버튼 메뉴에  명령 프롬프트 메뉴 넣기.........
[HKEY_CLASSES_ROOT\Directory\shell\cmd]
기본값 클릭한후 "명령프롬프트 열기"  를 적어준후
[HKEY_CLASSES_ROOT\Directory\shell\cmd\command] 에서 기본값 클릭    cmd.exe /k "cd %L"    를 적어준다

===무응답 프로그램의 대기 시간 줄이기
HKEY_CURRENT_USER / Control Panel / Desktop에서HungAppTimeout값을 1000 (1000 = 1초)로 설정.

===윈도우즈창의 애니메이션 없애기
HKEY_CURRENT_USER / Control Panel / desktop / windowmetrics 에서 문자열값의 MinAnimate추가한후 값을 0.

===다운로드 갯수 늘이기
HKEY_CURRENT_USER / SOFTWARE / Microsoft / Windows / CurrentVersion / Internet Settings 에서
[DWORD 값] 의 MaxConnectionsPerServer 추가한후 원하는 값을 적는다.

===익스폴로러 최대화로 시작하기
HKEY_CURRENT_USER / Software / Microsoft / Internet Explorer / Main 의 FullScreen 항목의 값을 yes로.

1) DNS캐쉬수정으로 브라우저속도 높이기

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects 의 폴더 또는 하위폴더삭제

인터넷 익스 로딩 속도 향상
HKEY_LOCAL_MACHINE / System / CurrentControlset / Services / Dnscache / Parameters
에서 다음항목의 값을 입력(없으면 새로 오른쪽 마우스 클릭하여 새로만들기->DWORD값-10진수로 만든다)

CachehHashTableBucketSize---->1
CachehHashTableSize---------->384
MaxCacheEntryTtlLimit-------->64000
MaxSOACacheEntryTtlLimit----->301

2)HKEY_USER.DefaultSoftwareMicrosoftWindowsCurrentVersionInterSettings
에서 [새로만들기] [DWORD] 값을 다음과 같이 만든다(값은 16진수로 선택)

MaxConnectionsPerSever------>20
MaxConnectionsPer1_0Sever--->20

HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInterSettings
에서도 위와 같이 값을 만든다

MaxConnectionsPerSever------>20
MaxConnectionsPer1_0Sever--->20

3) HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Windows / CurrentVersion / Explorer / RemoteComputer / NameSpace  에서
{D6277990-4C6A-11CF-8D87-00AA0060F5BF} 폴더 자체를 삭제

===L2캐쉬 지정으로 속도 향상
1.HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Control / Session Manager / Memory Management 의  SecondLevelDataCache항목에서
자신에 맞는 10진수 값을 입력한다.

AMD Duron → 64입력
CeleronA/celeron2/셀러론(윌라멧,노스우드) → 128입력
PII mobile/PIII E(EB)(칩형태 256K L2캐쉬내장 펜3 코퍼마인)/P4(윌라멧)/AMD K6-3/AMD THUNDERBird/Cyrix III/셀러론(투알라틴)/AMD Athlon(팔로미노,써러브레드) → 256입력
AMD K6-2/PII/PIII katmai(초기 카트리지형식 펜3 카트마이)/P4(노스우드)/AMD 바톤 → 512입력
PII Xeon/PIII Xeon → 1024입력


===캐쉬 메모리 최적화
HKEY_LOCAL_MACHINE/ SYSTEM / CurrentControlSet / ControlSessionManager / Memory Management
에서 마우스 오른쪽 버튼 클릭하여 [새로만들기] [DWORD]값을 선택.
새값에 IoPageLockLimit 라고 입력(대소문자 주의).
IoPageLockLimit를 더블클릭하여 아래 보기에서 자신의 램 사이즈에 맞는 16진수(hex)값을 다음과 같이 수정한다.

32MB = 4194304 (16진수: 400000)
64MB = 8388608 (16진수: 800000)
128MB = 16777216 (16진수: 1000000)
192MB = 25165824 (16진수: 1800000)
256MB = 33554432 (16진수: 2000000)
320MB = 41943040 (16진수: 2800000)
384MB = 50331648 (16진수: 3000000)
512MB = 67108864 (16진수: 4000000)
640MB = 83886080 (16진수: 5000000)
1024MB = 134217728 (16진수: 8000000)
재시작한다.

===폴더의 화일 출력 속도 높이기
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Update 로 이동.
오른쪽 창의 UpdateMode 에서 오른쪽 마우스 버튼을 클릭하고 [수정] 을 선택, value를 1에서 0으로 바꾼다.

===부팅시 자동 로그인---왠만하면 비추천
HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Windows NT / CurrentVersion / Winlogon
항목에서 오른쪽마우스 클릭하여 [새문자열값] 으로 다음값을 등록.

이름 값
AutoAdminLogon ---> 1
DefaultUserName ---> 유저명(사용하시는 유저명) : 이 항목은 보통 만들어져 있다
DefaultPassword ---> 패스워드(유저의 패스워드) : 지정없이 사용할때는 값을 공란으로 둔다

===바탕화면 아이콘의 화살표 없애기
HKEY_CLASSES_ROOT / lnkfile 의 isshortcut 삭제.

===오류 보고 사용하지 않기
1) 시작->제어판->성능 및 유지 관리->시스템
2) 시스템 등록정보창이 나타나면 [고급]탭에서 가장 아래에 있는 오류보고 버튼을 클릭한다.
3) 오류보고 대화상자에서 `오류 보고 사용 안 함`을 선택하고 확인버튼을 누른다.

===작업표시줄 딜레이 없애기
제어판 - 국가 및 언어 옵션-언어-텍스트 서비스 및 입력 언어의 자세히.
한글 입력기(IME 2002)-기본 설정의 입력 도구 모음-설정-고급 텍스트 서비스 사용 안함을 체크.
-텍스트 서비스 변경 창에서 예-확인

시작 -> 실행
Regsvr32.exe /u msimtf.dll
Regsvr32.exe /u msctf.dll
regedit
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
우측 창에서 ctfmon.exe를 삭제하고 재부팅.

다시 복원하고 싶다면 다음 실행코드를 명령 프롬포트 (실행창에 cmd입력) 에서 실행하면 된다.
%SystemRoot%\System32\Regsvr32.exe %SystemRoot%\System32\msctf.dll
%SystemRoot%\System32\Regsvr32.exe %SystemRoot%\System32\msimtf.dll

===폴더창 속도 향상
제어판에서 ``폴더옵션``을 실행한 다음, ``보기`` 메뉴탭을 선택하고 ``고급설정`` 부분에서
``폴더 및 바탕화면 항목에 팝업 설명 표시``와 ``압축된 파일과 폴더를 다른 색으로 표시`` 그리고
``독립된 프로세스로 폴더창 실행``의 체크를 해제하여 속도 향상

===익스 폴로러 최적화
도구 - 인터넷 옵션 - 고급 -탐색-
"예약시 동기화할 오프라인 항목 표시" 해제
" URL을 항상 UTF-8로 보냄" 해제
탐색에서 "프록시 연결을 통해 HTTP 1.1 사용" 해제
연결항목 랜설정항목에서... 자동구성과 프록시 서버를 모두 해제

===임시 인터넷 파일 최적용량
100M

===풍선 도움말 없애기
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced 에서
우측 패널에 REG_DWORD형의 EnableBalloonTips 값을 추가하고 데이타 값을 0으로 설정한다.

로그 오프/로그 온한다.

===바탕화면에 기본아이콘 배치하기
바탕화면에서 오른쪽마우스클릭-->속성-->바탕화면-->바탕화면사용자 지정
-->내바탕화면아이콘에서 필요 항목 체크인하면 된다

===실시간 동영상 끊김없이 감상하기
미디어 플레이어를 수행하고 [도구]→[옵션]-[성능]
`내 연결 속도` 옵션을 고르고 목록 버튼을 눌러 `T1(1.5Mbps)`를 선택한다.
`네트워크 버퍼링` 항목에서는 버퍼를 10초로 지정한다.
[네트워크]-`UDP` 항목의 체크 표시를 없앤다.
`프록시 설정` 항목에서 HTTP-`프로토콜 구성` 대화
상자가 나타나면 `프록시 서버 이용 안함` 옵션을 선택한다.

===마우스 오른쪽 메뉴에 메모장으로 보내기 넣기
`C:Documents and Settings****SendTo`라는 폴더가 있는데, 이곳에 메모장 아이콘을 복사해
넣기만 하면 된다. `SendTo` 폴더는 숨겨져 있으므로 보이지 않는다면 탐색기의 [도구]→[폴더옵션]
메뉴를 고르고 창이 뜨면 [보기] 탭으로 이동한 뒤 `숨김 파일 및 폴더 표시` 항목에 체크 표시하면
된다. 이미지 프로그램이나 동영상, 사운드 재생 프로그램 등도 등록해두면 요긴하게 쓸 수 있다.

===Windows Messenger 삭제 방법
1.windows/inf/sysoc.inf 폴더를 메모장으로 연다.
2.msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,hide,7-->이 라인을 찾아서 아래와 같이 변경하고
  msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,7-->hide,만 제거한후 저장한다.
3.위와 같이 변경하고 시작->제어판->프로그램 추가/제거->windows 구성요소 추가/제거에 Windows
  Messenger체크 옵션이 나타난다. 여기에 체크를 아웃하면 삭제된다.
추가적으로 msn익스플러도 삭제할 수 있다.

===MSN Explorer 삭제 방법
1. [시작]-[모든 프로그램]의 MSN Explorer 의 마우스 오른쪽 메뉴중 속성을 선택
2. "MSN Explorer 등록정보" 창이 뜨면 아랫부분에 있는 [대상 찾기]를 선택
3. 지금까지의 과정을 밟아 왔다면 MSN Explorer의 폴더로 이동을 해 있다. 거기에 폴더가 두 개가 있는데,
Setup이란 폴더를 열어 보면 msnunin이란 프로그램이 있는데, 이게 MSN Explorer의 "제거 프로그램" 이다.
클릭하면 시작 메뉴에 있는 "바로 가기"를 비롯해서 모든 게 제거.

===인증 확인
시작 -> 실행->oobe/msoobe /a (슬래시 a 앞에 한칸을 띄우는것을 주의..)

===그룹정책(gpedit.msc)으로 시스템의 각종 설정하기
시작 -> 실행 -> gpedit.msc
윈도우의 여러 세세한 부분을 직접 수정해줄수 있다.
추가하고 제거하는 식의 불안한 regedit와는 달리 gpedit.msc는 기능을 켜고 끄는 식이라
안전하기도 하고 정말 많은 부분에 손을 댈수 있다.
단적인 예로, 프로그램 추가/제거에서 프로그램변경/제거 항목을 숨길수도 있다.
각 항목 클릭시마다 설명도 자세히 나와있으니 참고.

===자체 방화벽 제거 방법
바탕화면의 네트워크환경의 등록정보를 연다-자신의 네트워크 연결항목 을 선택하고
마우스우측버튼을 클릭해서 등록정보를 열면 창이 나오는데,
고급-인터넷 연결방화벽을 체크하던지 체크아웃한다.

===종료로고만 나오고 전원이 꺼지지 않을때
(조치1) 제어판(control panel)-전원 옵션(power options)-APM탭-하단의 [Enable Power Management support](최대 절전모드사용) 를 체크.
APM지원을 체크한다.

(조치2) CMOS에서 전원관리 부분에 가서 "PM Control by AP" 를 YES라고 변경한다.

(조치3) 제어판-새 하드웨어 추가 를 클릭한다.
하드웨어 추가 마법사 - 다음 을 눌러 윈도우 XP가 새로 설치된 장치를 찾으면
하드웨어가 연결되어 있습니까? 하고 물어 보는데,
예, 하드웨어를 연결했습니다 선택하고 다음 을 누른다.
설치된 하드웨어 - 새 하드웨어 장치 추가 를 선택하고 다음 을 누른다.
원하는 작업을 선택하십시오 라고 나오면 목록에서 직접 선택한 하드웨어 설치(고급) 을
선택하고,다음 을 클릭.
일반 하드웨어 종류 에서 NT APM/레거시 지원 을 선택하고 다음 을 누르고,
하드웨어 추가 마법사를 계속 따라 하면 무사히 설치.

===하드가 이유없이 읽기를 반복할때
아무 작업도 하지 않는데 하드디스크드라이브 표시등이 계속 켜지면서 하드가 작동을 한다면
다음 설정을 해제한다.
제어판-관리도구-서비스-Indexing Service-속성-사용안함

===DMA 와 Vcache등의 설정으로 메모리 최적화 하기
system.ini에 본 글을 복사해서 넣는다


DMABufferSize=64
LocalLoadHigh=1
PageBuffers=128


[Vcache]
MinFileCache=49152
MaxFileCache=49152
Minimum=49152
Maximum=49152
chunksize=4096

위는 192램의 경우.
캐쉬값의 정확한 계산은 "실제 램의 용량" × 256" .
chunksize는 64램부터 320램까지 4096 .
32램은 3072 , 384램 이상부터는 5120 .
[386enh] 에 "LocalLoadHigh=1" 라고 문구를 하나 넣어주면 약간의 메모리를 할당받을 수 있다.
ps: 위의 문구를 system.ini 를 실행으로 연뒤 넣어주면 된다.
v캐쉬가 없으면 집접 잡아골라서 넣어주면 된다.
이 v 캐쉬 설정은 시스템에 무리를 주지 않는다.

===성능향상을 위한 레지스트리 수정법
IoPageLockLimit 값의 최상 값은?
HKEY_LOCAL_MACHINE / SYSTEM /CurrentControlSet /Control / Session Manager /Memory Management / IoPageLockLimit
※ 계산방법 : 자신의 램/8 * 1024 * 1024 = 10진수값
     예) 512/8 * 1024 * 1024 = 67108864
마우스 오른쪽 버튼 클릭하여 새로만들기->DWORD값을 선택한다. 새값에 IoPageLockLimit 라고
입력한다(대소문자 주의). IoPageLockLimit를 더블클릭하여 아래 보기의 값을 입력한다.

32MB = 4194304 (16진수: 400000)
64MB = 8388608 (16진수: 800000)
128MB = 16777216 (16진수: 1000000)
192MB = 25165824 (16진수: 1800000)
256MB = 33554432 (16진수: 2000000)
320MB = 41943040 (16진수: 2800000)
384MB = 50331648 (16진수: 3000000)
512MB = 67108864 (16진수: 4000000)
640MB = 83886080 (16진수: 5000000)
1024MB = 134217728 (16진수: 8000000)

===메모리로 부터 불필요한 DLL 제거하기
시작/실행/regedit를 입력하고, 확인을 클릭한다.
다음 레지스트리로 이동한다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer
REG_DWORD 형의 AlwaysUnloadDLL을 추가하고, 값을 1(DLL 캐쉬 사용안함)로 설정한다.
컴퓨터를 재기동한다.

===ADSL외장형 부팅시 딜레이 현상해결법
제어판->네트워크->로컬영역->일반->속성->인터넷프로토플->속성하시면입력하는 곳 나옵니다
인터넷프로토플TCP/IP -> RealTec RTL8139(본인의 랜카드)
ip.서브넷.게이트 웨이 3 군데 모두 수정해 주시고 확인 누르시고 재부팅
-회사별 모뎀 IP 주소 -
삼성(Acelink)
IP 주소 : 192.168.82.2
서브네트 마스크 : 255.255.255.0
게이트웨이에는 192.168.82.1 을 입력

현대(SpeedXess)
IP 주소 : 10.0.0.2
서브네트 마스크 : 255.255.255.0
게이트웨이에는 10.0.0.1 입력

성미(cisco)
IP 주소 : 211.42.204.195
서브네트 마스크 : 255.255.255.0
게이트웨이에는 211.42.204.1 입력

청호(루슨트 : Phastpipe)
IP 주소 : 192.168.1.2
서브네트 마스크 : 255.255.255.0
게이트웨이에는 192.168.1.1 입력

대우(Alcatel)
IP 주소 : 10.0.0.2
서브네트 마스크 : 255.0.0.0
게이트웨이에는 10.0.0.138 입력

노텔(Kmwt)
IP 주소 : 192.168.1.2
서브네트 마스크 : 255.255.255.0
게이트웨이에는 192.168.1.1 을 입력해주시기 바랍니다.

===cpu 100% 해결법
메모장에 아래의 내용을 복사한후 ***.inf 형식으로 저장-마우스 오른쪽메뉴의 설치

[Version]
signature=$CHICAGO$

[DefaultInstall]
DelReg=Delete_Old_Tweaks

[Delete_Old_Tweaks]
HKLM,"SOFTWARE\Classes\CLSID\{87D62D94-71B3-4b9a-9489-5FE6850DC73E}\InProcServer32"

===로그인 비번 잊어 버렸을때
일단 안전모드 부팅으로 들어갑니다. 안전모드로 들어가더라도 로그인 화면이 뜨지요 ?
그렇다면 여기서 ctrl-alt-del 을 눌러서 작업관리자를 선택하신후에 explorer 를 종료 시킵니
다. 그러면 바탕화면에 아무것도 안뜨고 멍~ 하니 컴퓨터가 있을겁니다.

그렇다면 다시 작업관리자를 실행시킨후에 새작업을 선택하셔서 explorer를 실행시킵니다.
그러면 로그인 과정을 전혀 거치지않고 바로 윈도우진입이 가능하지요. 일단 이것은 admin
계정으로 로그인된듯 싶으니, 제어판에서 계정관리로 가셔서 잊어버린 계정의 암호를 새로
설정해주시고 재부팅후 새로고친 암호를 입력하셔서 로그인하면 되겠습니다.

===마우스 오른쪽 잘못된 메뉴 항목 삭제하기
HKEY_CURRENT_USER / SoftWare / Microsoft /Windows /CurrentVersion / Explorerl / FileExts 에서 지울확장자 클릭
Open With List 에서 삭제 하고픈 연결 프로그램 삭제

===바탕화면의 아이콘이 모두 사라졌을때
안전모드로 부팅 (safe mode)후에 탐색기- 옵션 - 파일보기 - 모든파일보기로 체크
검색해보시면
C:\windows - ShelliconCached의 파일을 지운후 재부팅 (지워도 재부팅하면 다시 생깁니다.)

===MSN  ,  Outlook 관련
1. 삭제방법
    실행창에서 아래의 내용을 입력(대소문자구분)한 후 엔터를 누른다.
    RunDll32 advpack.dll,LaunchINFSection %windir%\INF\msmsgs.inf,BLC.Remove
    또는 windows/inf/sysoc.inf 파일을 메모장으로 연다 그다음
    msmsgs=msgrocm.dll,OcEntry,msmsgs.inf hide 7 ->이라인을 찾아서
    아래와 같이 변경하고 msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,7 ->hide,
    만 제거한후 저장하면 됩니다. 그리고 나서 시작 제어판 프로그램 추가/제거->
    윈도우즈 구성요소 추가/제거에 msn 메신져 체크 옵션이 나타납니다 여기에
    체크를 아웃하시면 삭제가 됩니다 추가적으로 msn 익스플로러도 삭제 가능합니
    다. 도움되셨길 바랍니다

2. 자동로그인 및 불필요한 사용자 ID 삭제
    실행창에서 아래의 내용을 입력(대소문자구분)한 후 엔터를 누른다.    
    rundll32 keymgr.dll,KRShowKeyMgr
   
    또는 제어판 -> 사용자계정 -> 등록된 사용자 클릭  -> 내 네트워크 암호 관리
    (Manage my network passwords)부분에서 자동으로 로그인 되는 .NET 계정을 삭
    제하면 된다. 다시 말해서 저장된 사용자 이름 및 암호에서 Passport.Net\* 를
    선택한 다음 제거를 클릭합니다.이 작업으로 Passport가 삭제되는 것은 아니며
    다만 컴퓨터와의 연결이 제거됩니다.

3. 바탕그림 바꾸기
    c:\program files\messenger\ 에 보면 Lvback.gif 란 파일이 있습니다.(이놈이
    두마리 홀맨같은 그림입니다)그걸 지워 버리고 배경으로 사용할 이미지 파일을
    위의 제목으로 저장하면 된다.

4. Outlook 실행시 Msn자동 실행되는 것 없애기
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Outlook Express에 Hide Messenger 라
    는 DWORD값을 만들고 데이터는 2를 설정하면 아웃룩실행시 메신저는 실행안됨.
    같이 실행되게 하려면 1로 설정.

5.  XXX@MSN.COM 메일을 Outlook에서 사용하는 방법
    아웃룩 익스프레스 실행 -> 도구 -> 계정 -> 추가 -> 메일 -> 표시이름 ex)홍길
    동 => 전자 메일 주소 ex) mrhong@msn.com  -> 받는 메일 서버유형 *HTTP -> HTTP
    메일 서버 공급자 *기타 -> 받는 메일 서버 * http://oe.msn.msnmail.hotmail.com/cgi-bin/hmdata ->계정 이름 ex) mrhong@msn.com  => 암호 ex)****** -> 마침
  
    위의 방법으로 msn계정 들록이 안될때
    MSN계정 속성으로 들어가서 보안탭을 누릅니다.
    여기에 보면 알고리즘이라는 목록이 있습니다.
    이 목록을 RC2(128-bit)라는 목록을 선택 후 적용 시킨뒤 확인을 누릅니다.

6. 메신저로 사전 사용하는 방법
    MSN에  dicya@hotmail.com  계정을 등록한다음. 그럼 담에 메시지 창을 띄어  영어
    단어나 한글 단어를 입력해  보세요. 그럼 영한사전,  한영사전에 검색된 내용이
    나옵니다.  

===내문서나 미디어플레이어 사용후에 흔적 지우기
실행-gpedit.msc - 사용자구성-관리템플릿-작업표시줄및시작매뉴의 우측창에서
종료시 최근에 사용한문서 기록지우기 하고
최근에 사용한 문서 기록을 보관안함. 이두개를 설정.

===프롬프트 창 닫히지 않게 ping 실행 시키는 방법
시작 - 실행에서 ping ****** 치면 창이 떴다가 바로 닫힌다.
이럴 경우 cmd /k ping www.winbbs.com 이라고 치면 된다.
cmd /k 를 앞에 붙혀주면 되는 것이다.
/k는 실행후 바로 창을 닫지 않겠다는 옵션이다.

===마우스 가속도 없애기
카스 마우스 가속도 없애기
1) 카스 단축아이콘의 대상에 -noforcemparms -noforcemaccel -noforcemspd 을 써넣어주는 것.

2) 시작-> 실행-> regedit 치고 엔터-> 편집/찾기에서 acceleration 검색해서 마우스 acceleration에 해당하는 부분은 Off로 설정

3) 제어판-> 마우스-> 포인터 옵션-> 포인터 정확도 향상의 체크 없애기
    (체크가 되어있으면 윈도우에서부터 마우스에 가속도가 있습니다)

4) 시작-> 실행-> regedit 치고 엔터-> HKEY_CURRENT_USER 디렉토리를 찾아서  Control Panel을 선택-> 그 안에서 Mouse를 찾아 클릭->SmoothMouseXCurve 와 SmoothMouseYCurve 를 더블클릭해서

SmoothMouseXCurve:
00,00,00,00,00,00,00,00
00,a0,00,00,00,00,00,00
00,40,01,00,00,00,00,00
00,80,02,00,00,00,00,00
00,00,05,00,00,00,00,00

SmoothMouseYCurve:
00,00,00,00,00,00,00,00
66,a6,02,00,00,00,00,00
cd,4c,05,00,00,00,00,00
a0,99,0a,00,00,00,00,00
38,33,15,00,00,00,00,00

이 숫자들로 바꾸는 겁니다. 참고로 숫자를 지우거나 선택하시고선 써넣으셔야지, 그냥 그 자리에 쓰시면 숫자들이 뒤로 밀린답니다.(그럼 틀리게 되겠죠)
!!! 그리고 이 4번째 항목에 있는 것은 카운터스트라익 뿐만 아니라 모든 게임에서의 가속도를 없애준다더군요. 좋을 수도 있겠지만 가속도가 필요한 게임이 있을런지도 모르니 유의하시길. (대부분의 fps게임은 가속도 없는게 좋음)

===프로세서가 어떻게 그룹화 됬는지 알아보기
시작 실행 창- cmd
Tasklist /SVC 라고 쳐보세요..
그럼 그놈이 어떤 어떤것들을 그룹화 시켰는지 나옵니다.
그리고.. 메모리 사용량 같은것은.. 윈도우 운영체제 영역이라서....
사용자가 결정할수는 없습니다. 다만.. 프로세스에 우선순위는 사용자가 매길수 있습니다.
어떤 프로세스를.. 우선적으로 처리 할지에 대한거 말이죠.
그 프로세스를 좀 세밀히 알면서 바이러스 및 해킹에도 적용하면 좋겟죠^^;


===예약 종료 명령
예약종료 하는 간단한 명령어 입니다.


1)시작 - 실행 에서 tsshutdn 3600 하시면 됩니다.
tsshutdn는 xp 종료 명령어 이고 기본은 60초로 지정되어있습니다.
뒤에 숫자는 초단위로서 원하는 시간 초단위로 변경하시면 됩니다.
그리고 종료되기까지의 유예기한이 30초 있습니다.(종료를 취소할수 있슴..종료 취소 명령어는 ctrl+c )
만약 5분뒤에 종료시키려고 tsshutdn 300치시면 정확히 300초후에
"30초 뒤에 종료 합니다" 라는 메시지가 뜨면서 30초 뒤에 종료 됩니다.

2) shutdown -s -t 초 그러니깐 1분후 꺼지게 하고싶다하면 60이고 2분후라면 120 이겠죠. 1시간 후에 꺼지게 하고싶다면 60*60= 3600 이니까
shutdown -s -t 3600 이렇게 하면 1시간후에 꺼집니다.
-s 대신 -r 넣으면 리부팅. 다른방법 tsshutdn 시간(초단위)      
취소는 shutdown -a 나 컨트롤+C 그럼 취소됨

===직접 속도 패치 하기
<자신의 MTU 값 구하는 방법>
우선 Windows안에 있는 MS-DOS 모드에서 Ping Test를 통해 Largest Non_Fragmented Value를 구해야 합니다.
시작-실행-cmd를 실행하면 명령프롬프트창이 뜹니다
MS-DOS 모드 명령어 실행

기본례) c:\>ping -f -l [Packet 사이즈(1 ~ 1500)] [ 서비스 회사의 주소]
실례) c:\>ping -f -l 1500 www.kornet.net

f 다음의 기호는 숫자 1 이 아니고 영어 소문자 l 입니다.
패킷 사이즈는 1500 부터 시작해서 숫자단위를 20씩 줄여나가면서(일단위부터 줄여나가도 상관없어요) 내려오면되구요. 이 핑테스트를 했을때 packet needs to boe fragmented
but DF set이란 에러 대신에 Reply from ... 이라고 나오면은 이값을 구합니다. 거기서 만약 나온값이 1472 라면 거기서 멈추지 말고 한숫자 위에 걸로 또 해보세요..1473 ..또 Reply from 나오면 또 올려보구요.
이 최대값이 Largest Non-Fragmented Value, 즉 깨지지 않는 가장 큰 단위(Packet)이며, Ping test를 통해 얻은 이 Largest Non-Fragmented Value에 28을 더한 값이 MTU값이 됩니다. 아마 한통 사용자들은 대개 1464 부터 reply from 이란 메시지가 나올듯싶네요.여기에 28을 더한값이 MaxMTU 값이죠. 다른 서비스업체분들도 저렇게 자신의 MTU값을 구해보세요. 서비스 회사의 주소는 자신이 가입되어 있는 통신 회사의 주소를 적는거 잊지말구요. (저의 경우 1472가 나오네요)

<자신의 MSS값 구하는 방법>
ping test로 얻은 MTU(Maximum Transmission Unit)값에서 Header의 크기인 40을
빼면 MSS(Maximum Sagment Size)가 됩니다.

*계산 방법
저의경우 예)1500 - 40 = 1460
위의 1460이 MSS값입니다.

< RWIN값 구하기 >
RWIN의 값은 정확하게 MSS의 배수가 되어야 합니다. 그래야만 Packet의 손실을 막을 수 있습니다. 비씨파크는 MSS에 176 사이스피드는 352를 곱했네요. 저는 176을 곱해서 256960이란 값으로 해보겠습니다.
(176곱한걸 추천합니다. RWIN값이 높으면 지연율이 높을수 있다네요.. 그리고 이왕이면 3년동안 연구했다던 박병철(비씨파크 대표 --;;)의 말을 믿어보는게 좋을거 같기도 하고...)

그리고 이 숫자를 16진수 값으로 바꿔야 하는데 하는 방법은 윈도우에 있는 계산기 실행시켜서 보기탭에서 공학용으로 바꿉니다. 숫자를 입력한후 Dec에서 Hex로 바꾸면 됩니다. 저의경우 3ebc0으로 나왔네요.

< TTL값 구하기 >
이 값은 가능한 값(64 or 128) 중에서 하나를 선택해 Ping test에서 얻은 근사치를 적으면 됩니다. 위에서 MTU 구할때 핑테스트시, 오른쪽에 보면 TTL 수치도 뜨죠.거기서보구 근사치를 입력해줍니다. TTL은 속도와는 무관합니다. (저는 122가 나왔기때문에 TTL값은 128로~)

이제 레지스트리를 직접 만들어 봅니다

텍스트 문서를 하나 만들어서 다음 내용을 적습니다.


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"SackOpts"=dword:00000001
"TcpWindowSize"=dword:0003ebc0
"Tcp1323Opts"=dword:00000001
"DefaultTTL"=dword:00000080
"EnablePMTUBHDetect"=dword:00000000
"EnablePMTUDiscovery"=dword:00000001
"GlobalMaxTcpWindowSize"=dword:0003ebc0


TcpWindowSize와 GlobalMaxTcpWindowSize에는 앞에서 구한 16진수로 된 RWIN 값을 적습니다. 저의 경우는 3ebc이네요
TTL에는 64일경우 40을, 128일경우 80을 적습니다.
MTU값에는 아까 핑테스트에서 구한 Largest Non-Fragmented Value 값을 적습니다.
저의 경우 1472네요 (대부분 1472나 1464일듯) 이걸 그대로 적는게 아니라 16진수로 변환해야하는데
1472는 16진수로 5c0 1464는 5b8이네요

이렇게 한후 저장한다음에 확장자를 reg로 바꿔주세요
ADSL 사용자는 "SessionKeepAlive"=dword:000927c0 값을 추가시켜 줘도 됩니다.
10분으로 적었는데 이건 10분마다 사용자가 인터넷을 안 사용 하더라도
자동으로 핑으로 트래픽을 발생시켜 인터넷 라인이 끊어지는 것을 방지합니다. (ADSL사용자라면 추가하는게 좋을듯)

===인터넷 서핑속도 높이기
실행. regedit 를 쳐 넣고 확인 클릭.
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings

MaxConnectionsPer1_0Server 와 MaxConnectionsPerServer 라는 것이 있나 찾아 봅니다.
있으면 그 값을 고치면 되고, 만약 없으면 이 두개를 만들어 넣어야 합니다.
만들어 넣는 방법은 오른쪽 부분의 빈공간에 마우스를 가져간 후
마우스 오른쪽 버튼을 클릭 합니다.

새로만들기 -> DWORD값. 을 선택합니다.
MaxConnectionsPer1_0Server 라고 써넣고...(반드시 대소문자를 확실히 구분해야하며
띄우기를 해서도 안됩니다. 복사해다가 그대로 붙여 넣는게 좋겠죠. 귀찮게 써 넣는거 보다.)
값 데이터..부분에는 16(기본값은 4-default 값)이라고 써 줍니다.(10진수를 선택)
이런 방법으로 MaxConnectionsPerServer 도 만든 후 값데이터에는 12(기본값은 2)를 넣어 줍니다.(10진수를 선택)
다 되었으면 레지스트리 편집기를 닫습니다.
단, 웹서버쪽에서도 한번에 2개 이상의 커넥션을 맺을 수 있도록 허용해 놔야 속도가 빨라진 것을 느낄 수 있을 껍니다.

===지워지지 않는 폴더 지우는 또 다른 방법
우선 도스 모드로.....가서....
파티션이 FAT이라면 도스상태에서 DEL, RD 명령으로 지우실수 있습니다.
커맨드창을 열고서(시작-실행-cmd)
RD \\.\Drive Letter:\경로
EX> RD \\.\C:\com1

이런식으로 지울수 있습니다.
커맨드 창에서 공백이 포함된 경로나 화일을 쓸때에는 " " 쓰는건 다 아시죠 ..
EX> DEL "\\.\C:\My Documents\com1"

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
Posted by 소리나는연탄.

Leave your greetings here.

  
  
  
  
  
  
  
  
 
« Previous : 1 : 2 : 3 : 4 : 5 : 6 : Next »